题意:
有n个城市,从城市i到城市j的花费为exp[i][j],有m天,第i天在城市j的收入为inc[i][j],每天可以选择留在当前城市或去下一个城市,问m天结束最多能有多少钱?
代码:
简单dp,dp[i][j]表示第i天结束在城市j能有多少钱。
代码:
//poj 3230 //sep9 #include <iostream> using namespace std; const int maxN=128; int dp[maxN][maxN]; int exp[maxN][maxN]; int inc[maxN][maxN]; int main() { int n,m,k; while(scanf("%d%d",&n,&m)==2&&n){ int i,j; for(i=1;i<=n;++i) for(j=1;j<=n;++j) scanf("%d",&exp[i][j]); for(i=1;i<=m;++i) for(j=1;j<=n;++j) scanf("%d",&inc[i][j]); for(i=1;i<=n;++i) dp[0][i]=-1000000000; dp[0][1]=0; for(i=1;i<=m;++i) for(j=1;j<=n;++j){ dp[i][j]=dp[i-1][1]+inc[i][j]-exp[1][j]; for(k=1;k<=n;++k) dp[i][j]=max(dp[i][j],dp[i-1][k]+inc[i][j]-exp[k][j]); } int ans=INT_MIN; for(i=1;i<=n;++i) ans=max(ans,dp[m][i]); printf("%d\n",ans); } return 0; }
原文地址:http://blog.csdn.net/sepnine/article/details/42236925