题目

分析
一道背包题
把拥有的钱看为容量,把纪念品今天的价格看做消耗,把明日的价格视为价值
f[j] = max(f[j], f[j-p[i][j]+p[i+1][j]-p[i][j)
状态转移就出来了
#include<bits/stdc++.h>
using namespace std;
int n, t, m;
int a[105][105], f[10005];//f盈利
int main() {
cin >> t >> n >> m;
for (int i = 1; i <= t; i++)
for (int j = 1; j <= n; j++) {
cin >> a[i][j];
}
for (int i = 1; i < t; i++) {//t-1
memset(f, 0, sizeof(f));
for (int j = 1; j <= n; j++) { //一轮n个物品
for (int k = a[i][j]; k <= m; k++) { // 物品当天的消耗
f[k] = max(f[k], f[k-a[i][j]]+a[i+1][j]-a[i][j]);
//不买或者买。
}
}
m += f[m];
}
cout << m;
return 0;
}
advice is like snow–the softer is falls, the longer it dwells upon, and deeper it sinks into the mind.
忠告有如雪片,落得越轻,停留心头越久,渗入心灵越深。
这是一篇关于使用动态规划解决纪念品购买优化问题的博客。作者通过将可用资金视为背包容量,纪念品当天价格视为消耗,明日价格视为价值,建立状态转移方程,求解最大收益。代码中展示了如何遍历所有物品和每天,计算最优策略,并更新最大盈利。博客还引用了一句关于忠告的名言,寓意解决问题的智慧深远。
634

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



