现在的位置: 首页 > 综合 > 正文

HDU 2571 命运 水DP

2012年10月05日 ⁄ 综合 ⁄ 共 642字 ⁄ 字号 评论关闭

消极题解凑数= =

话说今天的水题有点多了= =

本来想用最短路做的,但是不想那么麻烦,滚动数组也不想用,能水就水吧。记得以前做过一道类似的,不过是走路方针可以斜线,飞跃什么的,各种神。不过是BFS+队列罢了+GCD 罢了罢了还是水,不说了....

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;

int max( int a,int b ){ return a>b?a:b; }

int main()
{
 	int T;
 	scanf( "%d",&T );
 	while( T-- )
 	{
	 	   int n,c;
	 	   int value[22][1111];
	 	   int f[22][1111];
	 	   scanf( "%d %d",&n,&c );
	 	   for( int i=1;i<=n;i++ )
	 	   for( int j=1;j<=c;j++ )
	 	   {
	 	   		scanf( "%d",&value[i][j] );
	 	   		f[i][j]=-10000;
		   }
		   f[1][1]=value[1][1];
	 	   for( int i=1;i<=n;i++ )
	 	   for( int j=1;j<=c;j++ )
	 	   {
		   		f[i][j+1]=max( f[i][j+1],f[i][j]+value[i][j+1] );
		   		for( int k=j+j;k<=c;k+=j )
		   			 f[i][k]=max( f[i][k],f[i][j]+value[i][k] );
				f[i+1][j]=f[i][j]+value[i+1][j];
	   	   }
	   	   printf( "%d\n",f[n][c] );
  	}
 	return 0;
}

抱歉!评论已关闭.