hdu 2571 命运

//31MS    312K    873 B    C++
//二维DP,状态转移小变化 
#include<stdio.h>
#include<string.h>
int dp[25][1005];
inline int max(int a,int b)
{
    return a>b?a:b;
}
int main(void)
{
    int t,n,m;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                scanf("%d",&dp[i][j]);
        for(int i=1;i<=n;i++){
            int temp;
            for(int j=1;j<=m;j++){
                if(i==1 && j==1) continue;
                if(i==1) temp=dp[i][j-1];
                else if(j==1) temp=dp[i-1][j];
                else temp=max(dp[i][j-1],dp[i-1][j]);
                for(int k=1;k<=j/2;k++)
                    if(j%k==0)
                        temp=max(temp,dp[i][k]);
                dp[i][j]+=temp;
            }
        }
        printf("%d\n",dp[n][m]);
    }
    return 0;
}
                  

 

 

posted @ 2013-09-12 11:49  heaventouch  阅读(97)  评论(0编辑  收藏  举报