消极题解凑数= =
话说今天的水题有点多了= =
本来想用最短路做的,但是不想那么麻烦,滚动数组也不想用,能水就水吧。记得以前做过一道类似的,不过是走路方针可以斜线,飞跃什么的,各种神。不过是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; }