//dp完全背包 //f[i] = max(f[i], f[i - value] + interest); //注意预处理每个value,由于他们都是1K的倍数,故都除以1K, //不处理会超时。 #include <iostream> #include <cmath> #include <cstring> using namespace std; struct node { int value; int interest; }data[10]; int f[50000]; int main() { //freopen("1.txt", "r", stdin); int t; cin >> t; while(t--) { int money, year; cin >> money >> year; int d; cin >> d; for(int i = 0; i < d; i++) { cin >> data[i].value >> data[i].interest; data[i].value /= 1000; } while(year--) { memset(f, 0, sizeof(f)); int t = money / 1000; for(int i = 0; i < d; i++) { for(int j = data[i].value; j <= t; j++) { f[j] = max(f[j], f[j - data[i].value] + data[i].interest); } } money += f[t]; } cout << money << endl; } return 0; }
poj 2063 Investment 完全背包
最新推荐文章于 2019-11-24 23:57:32 发布
本文通过一个具体的案例,深入解析了DP(动态规划)中完全背包问题的解决思路及实现方法。采用C++语言,利用结构体存储每种投资选项的价值和收益,并通过二维数组进行动态规划求解最优解。
1625

被折叠的 条评论
为什么被折叠?



