UVALive 6853 - Concert Tour (dp)
2016-09-21 17:07
483 查看
题意:有s个月,c个城市,给出第几个月在第几个城市举办演唱会的收益,并且给出从一个城市到另一个城市的成本,求最大的收益。到达第一个城市不需要成本。
用dp[i][j]表示第j个月在第i个城市举办演唱会可以得到的最大收益。
用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 Concert Tour (DP)
- UVALive 6853 Concert Tour(dp)
- Cross the Wall UVALive - 5097 (贪心+斜率dp)
- UvaLive 4256 Salesman (DP)
- UVAlive 4999 状态压缩DP+最短路
- UVALive 4261——Trip Planning——————【dp+打印路径】
- UVALive - 6952 (隔板dp)
- UVALive - 5097(斜率DP)
- UVALive 6434 Number Assignment(dp)
- 2015暑假训练(UVALive 5983 - 5992)线段树离线处理+dp+floyed最短路
- UVALive 4794 Sharing Chocolate DP
- UVALive 6620 Josephina and RPG(概率DP)
- UVALive 6913 I Want That Cake 博弈dp
- UVALive 3942 Remember the Word(字典树 + 简单dp)
- UVALive 6840 Sweet War (博弈dp)
- UVALive 5088 Alice and Bob's Trip(树形DP)
- UVALive 2031 Dance Dance Revolution (舞步转移,状态压缩DP,4级)
- UVALive 3490 Generator(AC自动机+dp+高斯消元)
- 【UVALive 7505】Hungry Game of Ants(DP)
- UVALive 7271 A Math Problem 【数位dp计数】