首页 > 代码库 > SGU 104
SGU 104
简单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;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。