【双进程动规问题】NYOJ 61传纸条

来源:互联网 发布:php程序源码 编辑:程序博客网 时间:2024/05/21 14:43

http://www.cnblogs.com/HpuAcmer/archive/2012/05/06/2486591.html

#include <stdio.h> #include <string.h> int dp[105][53][53];int map[53][53];int max(int a,int b){  return a>b? a:b;    } int main(){  int T,row,col,i,j,all,k,t1,t2,ans;  scanf("%d",&T);       do    {       scanf("%d%d",&row,&col);                         for(i = 1 ; i <= row ; ++i)          for(j = 1 ; j <= col ; ++j)scanf("%d",&map[i][j]);                  all = row + col ;       for(k = 2 ; k <= all ; ++k)for(i = 1 ; i <=row ; ++i)for(j = 1 ; j <= row ; ++j)if(i != j && k >= i && k >= j){t1 = max(dp[k-1][i][j],dp[k-1][i][j-1]);     t2 = max(dp[k-1][i-1][j-1],dp[k-1][i-1][j]);  dp[k][i][j] = max(t1,t2) + map[i][k-i] + map[j][k-j];}                           ans = max(dp[all-1][row-1][row],dp[all-1][row][row-1]);                      printf("%d\n",ans);                             }while(--T);      return 0;    }


0 0