[编程题]数字和为sum的方法数
来源:互联网 发布:linux 启动service 编辑:程序博客网 时间:2024/06/05 01:04
链接:https://www.nowcoder.com/questionTerminal/7f24eb7266ce4b0792ce8721d6259800
来源:牛客网
给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。
当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。
输入描述:
输入为两行:
第一行为两个正整数n(1 ≤ n ≤ 1000),sum(1 ≤ sum ≤ 1000)
第二行为n个正整数A[i](32位整数),以空格隔开。
输出描述:
输出所求的方案数
输入例子:
5 15
5 5 10 2 3
输出例子:
4
# include <iostream># include <vector># include <algorithm>using namespace std;long long dp(int m,vector<int> &c){ vector<long long> nums(m+1,0); for(int i:c){ if (i>m) continue; for(int j = m;j>=1;j--){ if(nums[j]>0&&j+i<=m) nums[j+i] += nums[j]; } nums[i]++; } return nums[m];}int main(){ int n,sum; cin>>n>>sum; vector<int> candidates(n,0); for(int i = 0;i<n;i++){ scanf("%d",&candidates[i]); } cout<<dp(sum,candidates);}
建立一个长度为sum的数组,数组表示当前这个数有多少种组合方式。
对输入的每个元素i,若i<=sum,则:
* 数组[i]++
* 对数组的所有元素,数组[j+i]+=数组[j](因为更新是同时进行的,为防止标号小的对大的产生影响,要从大往小更新。 )
不断更新。
0 0
- [编程题]数字和为sum的方法数
- 数字和为sum的方法数
- 数字和为sum的方法数
- 数字和为sum的方法数
- 数字和为sum的方法数 滴滴笔试题
- 编程题——和为sum的方法数
- 滴滴出行2017秋招笔试编程题(二)——地下迷宫、数字和为sum的方法数
- 数据和为sum的方法数
- 2017滴滴校招 数字和为sum的方法数(DP)
- 【算法】拼凑面额+数字和为sum的方法数+走网格 (动态规划)
- 4Sum 4个数字的和为目标数
- 找到和为sum的两个数(剑指offer41、编程之美2.12)
- 给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数
- 编程之美(数字的魅力--和为定值的数)
- 数字和方法数
- 剑指offer38--数字的和为某个数
- Leetcode012--四个数字的和为指定数
- 编程练习[2]--某数为完全平方数,且有两个数字相同,不能使用int转为字符串的方法
- 二、ListView - model数据绑定
- 在8位单片机上面实现字符串的拼接(单片机上strcat的函数的实现)
- 我眼中的设计模式(6)
- (三十一)Qt中的调色板QPalette
- http与Socket的区别
- [编程题]数字和为sum的方法数
- 线程池ExecutorService
- 4、C++中新的关键字
- 图像处理基础(3):均值滤波器及其变种
- svn E000113错误
- Android Retrofit 2.0框架上传图片解决方案(一张与多张的处理)
- BS与CS的联系与区别
- 0220HTML学习
- UML常用图的几种关系的总结