???怎么了?
回复 38楼 StarWing83
新题代码:分割法程序代码:
#include <stdio.h> int main(void) { int i,j,k,*p,max,len,flag=1,a[1000]; long sum=1,t,m,n,b[1000]={0}; scanf("%d%d",&max,&len); for(i=0;i<len;i++) scanf("%d",&a[i]); p=a; k=len==1?a[0]-1:max; do{ m=1; for(i=0;i<k+1;i++) b[i]=0; for(i=len;i>0;i--) { for(j=0,n=0;j<k;j++,m-=t) {t=b[j],b[j]=m-t,n+=b[j];} m=n,sum+=n; k=i==2?p==a?p[0]-1:p[0]-(p[-1]+2):flag?k-1:k; } if(flag)flag=0; for(i=1,n=1;i<len;i++) if(p[i]-(p[0]+i)==0)n++; else break; if(n>=len)break; len-=n,k=len==1?p[1]-p[0]-1:max-(p[0]+(len-1)),p+=n; }while(1); printf("=%ld\n",sum); getch(); return 0; }如输入:
26 2 2 3
=52
·
26 5 22 23 24 25 26
=83681
·
26 26 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
=67108863
·