解题思路:类似于背包思路,画图以观察
注意事项: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分
54 人评分
简单的a+b (C语言代码)浏览:564 |
C语言程序设计教程(第三版)课后习题1.6 (C++代码)浏览:909 |
简单的a+b (C语言代码)浏览:564 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1072 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:782 |
C语言训练-尼科彻斯定理 (C语言代码)浏览:509 |
众数问题 (C语言代码)浏览:911 |
a+b浏览:452 |
C二级辅导-同因查找 (C语言代码)浏览:618 |
C语言程序设计教程(第三版)课后习题12.3 (C语言代码)浏览:587 |