POJ 1050 DP

来源:互联网 发布:网络语言的利与弊作文 编辑:程序博客网 时间:2024/05/21 09:49

队友很好的想法

lin[i][j][k]表示第i行第j列到第k列的和

sum[i][j][k]表示矩阵[(1,j),(i,k)]的最大矩阵和

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn =101;const int INF =1<<30;int line[101][101][101];int sum[101][101][101];int N, i, j, k, a, ans;int main(){    while (~scanf("%d", &N))    {          memset(sum, 0, sizeof(sum));          memset(line, 0, sizeof(line));                    for ( i =1; i <= N; i++)          {              scanf("%d", &line[i][1][1]);              for ( j =2; j <= N; j++)              {                  scanf("%d", &a);                  for ( k =1; k <= j; k++)                    line[i][k][j] = line[i][k][j-1]+a;              }          }          ans = -INF;          for ( i =1; i <= N; i++)            for ( j =1; j <= N; j++)              for ( k =j; k <= N; k++)              {                  sum[i][j][k] = max(sum[i-1][j][k]+line[i][j][k], line[i][j][k]);                  if (ans<sum[i][j][k])                      ans = sum[i][j][k];              }          printf("%d\n", ans);    }return 0;}