标签:
这道题有些类似于我做的文件排版,不知道到的可以看看那到题http://www.cnblogs.com/Ateisti/p/5790854.html
而且还更简单一些。
1 #include <cstdio> 2 #include <conio.h> 3 #include <vector> 4 #include <cstdlib> 5 #include <cstring> 6 #include <iostream> 7 using namespace std; 8 int t,n,sum[505],f[505],sc[505],tot; 9 int ans[505]; 10 11 int main( ){ 12 scanf("%d%d",&t,&n); 13 for(int x=1;x<=n;x++){int a;scanf("%d",&a);sum[x]=sum[x-1]+a;} 14 memset(f,127/2,sizeof(f)); 15 f[0]=0,f[1]=(t-sum[1])*(t-sum[1]); 16 for(int x=2;x<=n;x++){ 17 for(int k=0;k<x;k++){ 18 int he=sum[x]-sum[k]; 19 he=t-he-(x-k-1);if(he<0)continue; 20 he=he*he; 21 if(f[k]+he<=f[x]){f[x]=f[k]+he,sc[x]=k;} 22 } 23 } 24 printf("%d\n",f[n]); 25 int tot=n,cnt=1;ans[1]=n; 26 while(1){ 27 if(sc[tot]==0)break; 28 ans[++cnt]=sc[tot]; 29 tot=sc[tot]; 30 31 } 32 ans[++cnt]=0; 33 for(int x=cnt;x>1;x--){ 34 for(int y=ans[x]+1;y<=ans[x-1];y++){printf("%d ",sum[y]-sum[y-1]);} 35 printf("\n"); 36 } 37 return 0; 38 }
标签:
原文地址:http://www.cnblogs.com/Ateisti/p/5791207.html