10590 -Boxes of Chocolates Again Time limit: 3.000 seconds #include <iostream> #include<stdio.h> #include<string> #include<string.h> using namespace std; class bign//高精度 { public: int a[1000]; int leng; void print(); bign () {leng=0;memset(a,0,sizeof(a));} bign operator +(bign &b) const; }; void bign::print() //默认结果为非负 { int f=1; if(leng==0) printf("0"); else for(int i=leng-1;i>=0;i--) { if(f) printf("%d",a[i]); else printf("%.9d",a[i]); f=0; } } bign bign::operator +(bign &b) const { int top=leng>b.leng?leng:b.leng; bign c; for(int i=0,g=0;i<top+1;i++) { long long s=a[i]+b.a[i]+g; g=0; if(s<1000000000) c.a[i]=s; else {c.a[i]=s%1000000000;g=s/1000000000;} } int j; for(j=top+2;;j--) if(c.a[j]!=0) break; c.leng=j+1; return c; } bign f[5010]; int main() { int i,j,n; f[0].a[0]=1; f[0].leng=1; for(i=1; i<=5000; i++) for(j=i; j<=5000; j++)//进行背包 f[j]=f[j]+f[j-i]; while(~scanf("%d",&n)) { f[n].print(); cout<<endl; } return 0; }