http://poj.org/problem?id=3230
dp[i][j]表示第i天在城市j取得的最大价值
这题要注意初始化,最大价值可能是负的。
View Code
#include <iostream> using namespace std ; int cost[101][101],income[101][101] ; int dp[101][101] ; int main() { int n,m ; while(scanf("%d%d",&n,&m),n||m) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&cost[i][j]) ; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) scanf("%d",&income[i][j]) ; for(int i=0;i<101;i++) for(int j=0;j<101;j++) dp[i][j]=-10000 ; dp[0][1]=0 ; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) dp[i][j]=max(dp[i][j],dp[i-1][k]+income[i][j]-cost[k][j]) ; int maxx=-10000 ; for(int i=1;i<=n;i++) maxx=max(maxx,dp[m][i]) ; printf("%d\n",maxx) ; } return 0 ; }