这个题容易WA,一般不会注意高精度问题,但对于高精度的处理很有技巧。
推荐http://www.cnblogs.com/kuangbin/archive/2012/09/20/2695165.html
里面给了五种方法,很不错
在这里附上大神的代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 long long a[1100],b[1100],inf; 7 8 int main(){ 9 int n,k,i,j; 10 for(inf=1,i=0;i<18;i++) inf*=10; 11 scanf("%d%d",&n,&k); 12 memset(a,0,sizeof(a)); 13 memset(b,0,sizeof(b)); 14 a[0]=1; 15 for(i=1;i<=k;i++){ 16 for(j=1;j<=n;j++){ 17 if(j-i<0) continue; 18 b[j]=b[j]+b[j-i]+(a[j]+a[j-i])/inf; 19 a[j]=(a[j]+a[j-i])%inf; 20 } 21 } 22 if(b[n]) printf("%I64d",b[n]); 23 printf("%I64d ",a[n]); 24 return 0; 25 }