您的位置:首页 > 其它

UVALive 6853 - Concert Tour (dp)

2016-09-21 17:07 483 查看
题意:有s个月,c个城市,给出第几个月在第几个城市举办演唱会的收益,并且给出从一个城市到另一个城市的成本,求最大的收益。到达第一个城市不需要成本。

用dp[i][j]表示第j个月在第i个城市举办演唱会可以得到的最大收益。

dp[i][j] = max(dp[i][j], dp[k][j - 1] + id[i][j] - mp[k][i]);k是上个月举办演唱会的城市。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int INF = 0x3f3f3f3f;
int mp[111][111];
int id[111][111];
int dp[111][111];
int main() {
int t, n, m, i, j, k;
scanf("%d", &t);
while(t--) {
scanf("%d%d", &n, &m);
for(i = 1; i <= n; i++) {
for(j = 1; j <= m; j++) {
scanf("%d", &id[i][j]);
}
}
for(i = 0; i <= n; i++)
for(j = 0;  j<= m; j++)
dp[i][j] = -INF;
for(i = 1; i <= n; i++) {
for(j = 1; j <= n; j++)
scanf("%d", &mp[i][j]);
}
for(i = 1; i <= n; i++)
dp[i][1] = id[i][1];
for(j = 2; j <= m; j++) {
for(i = 1; i <= n; i++) {
for(k = 1; k <= n; k++) {
dp[i][j] = max(dp[i][j], dp[k][j - 1] + id[i][j] - mp[k][i]);
}
}
}
int ans = -INF;
for(i = 1; i <= n; i++)
ans = max(ans, dp[i][m]);
printf("%d\n", ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  UVALive 6853 dp