题意:给出一个值n,有1~n的点数,然后无限次使用求凑出n的组合次数
思路:和HDU1398大致类似,就是求硬币组合数这样的类型,然后面额部分不同就在面额处进行修改;
所以直接利用模板得题解:
#include <iostream>
#include <cstdio>
const int maxn=1000;
using namespace std;
int c1[maxn],c2[maxn];
int main(){
int n;
while(~scanf("%d",&n))
{ int i,j,k;
for(i=0; i<=n; i++)
c1[i]=1,c2[i]=0;
for(i=2; i<=n; i++)
{
for(j=0; j<=n; j++)
for(k=0; j+k<=n; k+=i)
c2[j+k]+=c1[j];
for(j=0; j<=n; j++)
c1[j]=c2[j],c2[j]=0;
}
printf("%d\n",c1[n]);
}
}