LeeBlog

导航

HDU 2571 命运

这题很DP就是跟前面一样一步一步来,先找到一部分,然后把这部分扩大,最后至全部,最终找出全局最优解,这里要注意,他给的测试数据太淫荡了,其实|K|>100,所以max初始化时给个1111吧

#include<stdio.h>
#include<string.h>
int n,num[25][1024],m;
int main( )
{
    int t;
    scanf( "%d",&t );
    while( t-- )
    {
        scanf( "%d%d",&n,&m );
        memset( num,0,sizeof( num ) );
        for( int i = 1; i <= n; ++i )
            for( int j = 1; j <= m; ++j )
                scanf( "%d",&num[i][j] );
        for( int i = n; i; --i )
            for( int j = m; j; --j )
            {
                int max = -1111;
                if( i == n&& j == m )
                    max  = 0;
                if( i < n )
                    if( num[i+1][j] > max )
                        max = num[i+1][j];
                if( j < m )
                    if( num[i][j+1] > max )
                        max = num[i][j+1];
                int c = j + j;
                while( c <= m )
                {
                    if( num[i][c] > max )
                        max = num[i][c];
                    c += j;//这里不要写错了,我把这里写错了,结果一直wa
                }
                num[i][j] += max;
               // printf( "%d %d = %d\n",i,j,num[i][j] );
            }
            printf( "%d\n",num[1][1] );
    }
    return 0;
}

posted on 2011-04-23 22:44  LeeBlog  阅读(185)  评论(0编辑  收藏  举报