标签:style blog io for div amp size log
简单DP。
递推关系式:f[i,j]=max{f[i-1,k]}+value[i,j].
其中,i>=2,i<=j<=V-F+i,i-1<=k<j(原程序中貌似写成了i<=k<j TUT 不知道怎么AC的- -
V是空间数,F是花的总数。
#include "stdio.h" #include "string.h" const int MAXF=100,MAXV=100; int main(){ int f[MAXF+2][MAXV+2],g[MAXF+2][MAXV+2]; short val[MAXF+2][MAXV+2]; int stack[MAXF+2]; int i,j,k,F,V,max,m,top=0; scanf("%d%d",&F,&V); for(i=1;i<=F;i++){ for(j=1;j<=V;j++){ scanf("%d",&val[i][j]); } } for(i=1;i<=V-F+1;i++){ f[1][i]=val[1][i]; } for(i=2;i<=F;i++){ for(j=i;j<=V-F+i;j++){ max=-96666; for(k=i;k<j;k++){ if(max<f[i-1][k]){ max=f[i-1][k]; m=k; } } f[i][j]=max+val[i][j]; g[i][j]=m; } } max=-99999; for(i=F;i<=V;i++){ if(max<f[F][i]){ max=f[F][i]; m=i; } } memset(stack,0,sizeof(stack)); stack[1]=m;top=1; printf("%d\n",max); for(i=F-1;i>=1;i--){ top++;stack[top]=g[i+1][stack[top-1]]; } for(i=top;i>=1;i--){ printf("%d",stack[i]); if(i!=1)printf(" "); } return 0; }
标签:style blog io for div amp size log
原文地址:http://www.cnblogs.com/lostwinder/p/3876099.html