网站备案流程实名认证,凡科网微信小程序制作,vue怎么做网站,企业管理者培训查询给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。 当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。 输入描述:
输入为两行: 第一行为两个正整数n(1 ≤ n ≤ 1000)#xff0c;sum(1 ≤ sum ≤ 1000) 第二行为n个正整数Ai…给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数。 当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。 输入描述:
输入为两行: 第一行为两个正整数n(1 ≤ n ≤ 1000)sum(1 ≤ sum ≤ 1000) 第二行为n个正整数Ai以空格隔开。
输出描述:
输出所求的方案数
示例1 输入
5 15 5 5 10 2 3
输出
4
#include iostream
using namespace std;
const int N 1010;
int dp[N][N];
int a[N];int main() {int n, k;cin n k;for (int i 1; i n; i)cin a[i];dp[0][0] 1;for (int i 1; i n; i)for (int j 0; j k; j) {dp[i][j] dp[i - 1][j];if (j a[i])dp[i][j] dp[i - 1][j - a[i]];}cout dp[n][k] endl;return 0;
}空间优化:
#include iostream
using namespace std;
const int N 1010;
int dp[N];
int a[N];int main() {int n, k;cin n k;dp[0] 1;for (int i 1; i n; i)cin a[i];for (int i 1; i n; i)for (int j k; j a[i]; j--) {dp[j] dp[j - a[i]];}cout dp[k] endl;return 0;
}