数字组合(动态规划)

摘要:
数字组合时间限制:1秒内存限制:256MB提交:30解决方案:24[提交][状态][讨论板]主题描述找出N个数字中的M个。首先读入正整数N和M,然后读入N个正数。从N个数字中找出一个数字,使其总和为M。找出满足条件的所有数字组合,以计算组合数并输出组合数。您的程序需要运行不超过1秒。第一行输入是两个数字,分别代表N和M。第二行以N个数字开头。输出一个数字,表示M和的组合数。

数字组合

时间限制: 1 Sec  内存限制: 256 MB
提交: 30  解决: 24
[提交][状态][讨论版]

题目描述

在 N个数中找出其和为M的若干个数。先读入正整数N(1<N<100)和M(1<M<10000), 再读入N个正数(可以有相同的数字,每个数字均在1000以内), 在这N个数中找出若干个数, 使它们的和是M, 把满足条件的数字组合都找出来以统计组合的个数,输出组合的个数(不考虑组合是否相同)。要求你的程序运行时间不超过1秒。

输入

第一行是两个数字,表示N和M。
第二行起是N个数。

输出

一个数字,表示和为M的组合的个数。

样例输入

4 4
1 1 2 2

样例输出

3
数字组合(动态规划)第1张数字组合(动态规划)第2张
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <climits>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <list>
#include<functional>
#define mod 1000000007
#define inf 0x3f3f3f3f
#define pi acos(-1.0)
using namespace std;
typedef long long ll;
const int N=105;
const int M=10005;
ll power(ll a,int b,ll c) {ll ans=1;while(b) {if(b%2==1) {ans=(ans*a)%c;b--;}b/=2;a=a*a%c;}return ans;}
int a[N],n,m,dp[M];
int main() {
    scanf("%d%d",&n,&m);
    for(int i=1; i<=n; i++)
        scanf("%d",&a[i]);
    dp[0]=1;
    for(int i=1; i<=n; i++)
        for(int j=m; j>=a[i]; j--)
            dp[j]+=dp[j-a[i]];
    printf("%d",dp[m]);
    return 0;
}
View Code

免责声明:文章转载自《数字组合(动态规划)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇javascript获取网页URL地址及参数等Java 中怎么获取一份线程 dump 文件?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

斐波那契数列(动态规划)

#include "stdafx.h" #include <iostream> using namespace std; #define MAXSIZE 100 int bofei_bottom(int n) { int f[MAXSIZE]; f[0] = 0; f[1] = 1; for (int i = 2; i <= n;...

luoguP3830 [SHOI2012]随机树 期望概率 + 动态规划 + 结论

题意非常的复杂,考虑转化一下: 每次选择一个叶节点,删除本叶节点(深度为$dep$)的同时,加入两个深度为$dep + 1$的叶节点,重复$n$轮 首先考虑第$1$问,(你看我这种人相信数据绝对是最大的数据,直接$f[i][S]$表示$i$个叶子结点,深度之和为$j$的时候的概率,然后化前缀和化出来...) 对于一个深度为$x$的点,对它操作后,深度增...

【动态规划】闫氏dp分析

来源于Acwing yxc的闫氏dp分析讲解,本文为几道经典例题的笔记 目录 53. 最大子序和 120. 三角形最小路径和 91. 解码方法 62. 不同路径 63. 不同路径 II 198. 打家劫舍 72. 编辑距离 53. 最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。...

Codevs_1040_[NOIP2001]_统计单词个数_(划分型动态规划)

描述 http://codevs.cn/problem/1040/ 与Codevs_1017_乘积最大很像,都是划分型dp. 给出一个字符串和几个单词,要求将字符串划分成k段,在每一段中求共有多少单词(两个单词不能共享第一个字母),将每一段中的单词个数相加,求最大值. 1040 统计单词个数 2001年NOIP全国联赛提高组 时间限制: 1 s...

数据结构 练习 19-活动选择问题的实现(动态规划 和 贪心)

问题叙述:如下图表示活动的开始和结束时间,s[i],开始时间;f[j]结束时间。现在要进行一些列如下活动,注意每个时间段只能进行一场活动,也就是活动不能同时进行,要求举行的活动次数最多。求调度方法。 老规矩,动态规划,要找出两个问题: 1,子问题的最优解; 2,子问题是什么。 abviously,本问题的最优解为:活动数的次数最多,子问题是:看递推公式...

Max Sum Plus Plus (动态规划) HDU1024

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1024 (http://www.fjutacm.com/Problem.jsp?pid=1375) 题意:长度为n的序列里,m段不相关区间的最大和 思路:我们先要确定一个东西,就是状态,这里我用dp[i][j]表示前j个数在取a[j]情况下分i段的最大和; 那么...