HDU 2571 命运

这个题我们可以直接顺序往下面暴力,每次选取最大的;

View Code
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main( )
{
int Case ,n ,m;
int map[24][1024],sum[24][1024];
while( scanf( "%d", &Case )==1 )
{
while( Case -- )
{
memset( map , 0 ,sizeof( map ) );
// memset( sum , 0 ,sizeof( sum ) );
scanf( "%d%d",&n ,& m );
for( int i = 1 ; i <= n ; i++ )
for(int j = 1 ; j <= m; j++ )
{
scanf( "%d",&map[i][j] );
sum[i][j] = -1000000000;
}
sum[1][1] = map[1][1];
for( int i = 1 ; i <= n ; i++ )
{
for( int j = 1; j <= m ; j++ )
{
if( sum[i+1][j] < sum[i][j] + map[i+1][j] )
sum[i+1][j] = sum[i][j] + map[i+1][j];

if( sum[i][j+1] < sum[i][j] + map[i][j+1] )
sum[i][j+1] = sum[i][j] + map[i][j+1];
int k = 2 ,t= k*j;
while( t <= m )
{
if( sum[i][t] < sum[i][j] + map[i][t] )
sum[i][t] = sum[i][j] + map[i][t];
k ++ ;
t = j*k;
}
}
}
printf( "%d\n",sum[n][m] );
}
}
return 0;
}

 

posted @ 2012-03-07 21:20  wutaoKeen  阅读(142)  评论(0编辑  收藏  举报