题源:51nod 1083
题意:给一个矩阵,只能从右边或者是从下走,求从左上角走到右下角的最大值。我第一次写用dp[i][j] += max(dp[i+1][j],dp[i][j+1]),一直wa难受,后面反应过来,改成了dp[i][j] += max(dp[i+1][j],dp[i][j]),果然还是太菜了。。
代码:
#include <iostream> #include <cstdio> #include <string> #include <string.h> #include <math.h> using namespace std; typedef long long ll; const int maxn = 1010; int dp[maxn][maxn]; int s = 0; int main() { int t; cin >> t; memset(dp,0,sizeof(dp)); for(int i = 1;i <= t;++i) { for(int j = 1;j <= t;++j) { cin >> dp[i][j]; } } for(int i = 1;i <= t;++i){ for(int j = 1;j <= t;++j){ dp[i][j] += max(dp[i-1][j],dp[i][j-1]); } } cout << dp[t][t] << endl; return 0; }