解题思路:类似于背包思路,画图以观察
注意事项:a[0][0]=1;理解成数量为0组成0的次数为1,以下类似,比如前1个数组成0的几率为1;
参考代码:
#include<bits/stdc++.h> using namespace std; const int MAX = 1001; int a[MAX][MAX]; int b[MAX]; int main() { int n, t; cin >> n >> t; for (int i = 1; i <= n; i++) { cin >> b[i]; } a[0][0] = 1; for (int i = 1; i <= n; i++) { for (int j = 0; j <= t; j++) { if (b[i] > j) a[i][j] = a[i - 1][j]; else { a[i][j] = a[i - 1][j] + a[i-1][j - b[i]]; } } } /* for (int i = 0; i <= n; i++) { for (int j = 0; j <= t; j++) { cout << a[i][j]; if (j==t) cout << endl; } } */ //输出测试观察 cout << a[n][t]; }
0.0分
53 人评分
【数组的距离】 (C语言代码)浏览:728 |
C语言程序设计教程(第三版)课后习题1.5 (C++代码)浏览:755 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:608 |
剪刀石头布 (C语言代码)浏览:747 |
完数 (C语言代码)浏览:682 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:579 |
1197求助浏览:627 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:446 |
整数分类 oj上总是wrong answer浏览:661 |
用getchar()函数接收字符,正序输入为什么会倒序输出浏览:739 |