http://acm.hdu.edu.cn/showproblem.php?pid=1284
咳咳 因为参考了大牛的代码。。。所以。。。就算转载吧。。。。。。。。
#include<cstdio> using namespace std; int f[32773]; int main() { f[0]=1; int i; int j; for(i=1;i<=3;i++) for(j=i;j<32773;j++) f[j]=f[j]+f[j-i]; int x; while(~scanf("%d",&x)) printf("%d\n",f[x]); return 0; }整整研究了半个小时。。。。
其中 i=1时,循环求出了只有1分的情况
i=2时,若已知f[j] ,如果对f[j]中的所有情况中都加一个二分,则 这些情况必然存在于f[j+2]中。
同理,有了第三次循环求出加入三分后的情况。。。。
就这样吧。。。