poj3230Travel(dp动态规划)
题目链接:http://poj.org/problem?id=3230
1 #include<iostream> 2 #include<algorithm> 3 #include<cmath> 4 #include<cstring> 5 #include<cstdio> 6 #define inf 0x3f3f3f3f 7 using namespace std; 8 const int N = 105; 9 10 int dp[N][N], in[N][N], to[N][N]; 11 12 int main() { 13 14 int n, m; 15 while (cin >> n >> m && n != 0 && m != 0) { 16 memset(dp, -0x3f, sizeof(dp)); 17 for (int i = 1; i <= n; i++) { 18 //dp[0][i] = 0; 19 for (int j = 1; j <= n; j++) { 20 cin >> to[i][j]; 21 } 22 } 23 for (int i = 1; i <= m; i++) { 24 for (int j = 1; j <= n; j++) { 25 cin >> in[i][j]; 26 if (i == 1) { 27 dp[i][j] = in[i][j] - to[i][j]; 28 } 29 } 30 } 31 //cout << dp[1][1] << dp[1][2] << dp[1][3] << "\n"; 32 for (int i = 2; i <= m; i++) { 33 for (int j = 1; j <= n; j++) { 34 for (int k = 1; k <= n; k++) { 35 dp[i][j] = max(dp[i - 1][k] + in[i][j] - to[k][j], dp[i][j]); 36 //cout << dp[i][j] << " " << i << " " << j << "\n"; 37 } 38 } 39 } 40 int ans = -inf; 41 for (int i = 1; i <= n; i++) { 42 ans = max(dp[m][i], ans); 43 } 44 cout << ans << "\n"; 45 } 46 return 0; 47 }
永远热爱,永远向着光。

浙公网安备 33010602011771号