题目
分析
一道背包题
把拥有的钱看为容量,把纪念品今天的价格看做消耗,把明日的价格视为价值
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.
忠告有如雪片,落得越轻,停留心头越久,渗入心灵越深。