state:
dp[i][j] - max profit when in city j at day i
transition:
dp[i][j]=max(dp[i][j], dp[i-1][k]+l[k][j]), 1<=k<=C
for all city k, if he was at city k yesterday, then we must have got the max profit of
dp[i-1][k], and then we add l[k][j] to the sum
/* UVas */ /*****************************************************************************/ int C, S, E, T; int e[101]; int l[101][101]; int d[1001][101]; int main(void) { while (cin>>C>>S>>E>>T&&C&&S&&E&&T) { for (int i=1; i<=C; i++) { for (int j=1; j<=C; j++) { cin>>l[i][j]; } } for (int i=1; i<=E; i++) { cin>>e[i]; } memset(d, -1, sizeof(d)); d[0][S]=0; for (int i=1; i<=T; i++) { for (int j=1; j<=C; j++) { for (int k=1; k<=C; k++) { if (d[i-1][k]!=-1) { d[i][j]=max(d[i][j], d[i-1][k]+l[k][j]); } } } } int r=0; for (int i=1; i<=E; i++) { r=max(r, d[T][e[i]]); } cout<<r<<endl; } return 0; } /*****************************************************************************/
No comments :
Post a Comment