解题思路:类似于背包思路,画图以观察
注意事项: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 人评分
点我有惊喜!你懂得!浏览:1236 |
C二级辅导-统计字符 (C语言代码)浏览:533 |
破解简单密码 (C语言代码)浏览:1762 |
川哥的吩咐 (C++代码)浏览:1010 |
C语言训练-立方和不等式 (C语言代码)浏览:747 |
蓝桥杯历届试题-九宫重排 (C++代码)浏览:2783 |
【亲和数】 (C语言代码)浏览:492 |
简单的a+b (C语言代码)浏览:626 |
printf基础练习2 (C语言代码)浏览:746 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:780 |