POJ 3230 Travel 动态规划Dp

来源:互联网 发布:pi补偿网络 编辑:程序博客网 时间:2024/05/17 19:57

大致题意:

有一位旅行者想在n个城市中旅行m天,旅行从一个城市到另一个城市需要一定的花费,到一个城市又可以得到钱,但这个钱会随着时间变化,现在求最大利润。


数据范围n,m<100


很容易想到dp

f[i][j]表示第i天到城市j的最大利润

转移方程 f[i][j] = max( f[i-1][k] - cost[k][j] + earn[i][j]  )

#include <cstdio>#include <cstring>#include <cmath>#include <string>#include <cstdlib>#include <algorithm>#include <iostream>using namespace std;int n,m;int f[110][110];int c[110][110];int w[110][110];int main(){while(scanf("%d%d",&n,&m)){if(n == 0 && m == 0)break;for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)scanf("%d",&c[i][j]);for(int i = 1; i <= m; i++)for(int j = 1; j <= n; j++)scanf("%d",&w[i][j]);memset(f,195,sizeof(f));for(int i = 1; i <= n; i++)f[1][i] = w[1][i] - c[1][i];for(int i = 2; i <= m; i++)for(int j = 1; j <= n; j++)for(int k = 1; k <= n; k++)f[i][j] = max(f[i][j],f[i-1][k] + w[i][j] - c[k][j]);int ans = f[0][0];for(int i = 1; i <= n; i++)if(ans < f[m][i])ans = f[m][i];cout << ans << endl;}return 0;}


0 0
原创粉丝点击