hdu2571 命运

每组测试数据的第一行是两个整数n,m,分别表示行数和列数(1<=n<=20,10<=m<=1000);

 

悔不该看错题,WA了无数遍

把m,n的范围看反了。。。。狂WA= =

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
__int64 m,n;
__int64 a[22][1010];
__int64 d[22][1010];
int main()
{
    __int64 total;
    scanf("%I64d",&total);
    while(total--)
    {
        scanf("%I64d %I64d",&m,&n);
        __int64 i,j;
        for(i=0;i<m;i++)
        {
            for(j=0;j<n;j++)
            {
                scanf("%I64d",&a[i][j]);
            }
        }
        __int64 temp;
        __int64 k;
        d[0][0]=a[0][0];
        for(i=1;i<m;i++)
        {
            d[i][0]=d[i-1][0]+a[i][0];
        }
        for(i=1;i<n;i++)
        {
            temp=d[0][i-1];
            for(j=0;j<i-1;j++)
            {
                if((i+1)%(j+1)==0)
                {
                    if(temp<d[0][j])
                    {
                        temp=d[0][j];
                    }
                }
            }
            d[0][i]=temp+a[0][i];
        }
        for(i=1;i<m;i++)
        {
            for(j=1;j<n;j++)
            {
                temp=d[i-1][j];
                if(temp<d[i][j-1])
                {
                    temp=d[i][j-1];
                }
                for(k=0;k<j-1;k++)
                {
                    if((j+1)%(k+1)==0)
                    {
                        if(d[i][k]>temp)
                        {
                            temp=d[k][j];
                        }
                    }
                }
                d[i][j]=temp+a[i][j];
            }
        }
        printf("%I64d\n",d[m-1][n-1]);
    }
    return 0;
}
posted @ 2012-08-10 22:01  willzhang  阅读(220)  评论(0编辑  收藏  举报