只要知道递归出口就行了,状态转移方程很容易找。
参考代码:
#include<bits/stdc++.h> using namespace std; int DP(int volume, int num, int data[]) { if (num < 0) return volume; if (volume < data[num]) return DP(volume, num - 1, data); if (volume >= data[num]) { int A = DP(volume - data[num], num - 1, data); int B = DP(volume, num - 1, data); return A < B ? A : B; } } int main(){ int data[30], num, volume; cin >> volume >> num; for (int i = 0; i < num; i++) cin >> data[i]; cout << DP(volume, num - 1, data); return 0; }
0.0分
0 人评分
弟弟的作业 (C++代码)浏览:1342 |
【绝对值排序】 (C语言代码)浏览:832 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:561 |
【计算两点间的距离】 (C语言代码)浏览:927 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:690 |
A+B for Input-Output Practice (II) (C语言代码)浏览:1043 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:631 |
最小公倍数 (C语言代码)浏览:1105 |
川哥的吩咐 (C语言代码)浏览:663 |
A+B for Input-Output Practice (I) (C语言代码)浏览:451 |