???怎么了?
回复 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
·








字面还真不好细说我的方法,大至就是分割,看能不能用图割给你看。
