int i,j;
dp[0]=1;
for(i=1;i<=3;i++)
for(j=i;j<=35000;j++)
dp[j]+=dp[j-i];
int n;
while(scanf("%d",&n)!=EOF){
printf("%d\n",dp[n]);
}
return 0;
}
#include <stdlib.h>
#include <string.h>
using namespace std;
{
while(~scanf("%d", &N))
{
int s = N/3+1;
for(int i = 0 ; i <= N/3 ; i++)
{
int t = (N-3*i)/2;
s += t;
}
printf("%d\n", s);
}
return 0;
}
所以 是 N/3 + 1; 现在钱币兑换成全部由 三分 和一分 填充的 下面将三分的逐步替换成二分的 所以有 (N- i*3) /2;
N 表示用一分的填充 i*3 表示用三分的填充 (N-i*3)/2 将所有用一分的 逐步减去用三分的填充 然后将一分的用二分的填充 然后将 这几次的填充数加和
这道题还是比较好看的,我们根据母函数的定义,以及多项式的每一项和系数所表示的含义,我们可以定义母函数G(x)=(1+x+x^2+x^3--------)*(1+x^2+x^4+x^6+x^8--------)*(1+x^3+x^6+x^9--------------),那么我们使用母函数的额展开式对应的指数就是能表示的钱币数,系数就是表示该钱币数的方案数。
所以问题就是求出对应的n的系数就可以了,这个比较简单,就是模拟手工多项式的展开,
#include <cstdlib>
#include <cstdio>
using namespace std;
const int Max=32769;
int ans[Max];
int tans[Max];
int main()
{
int i,j,n;
for(int i=0;i<Max;i++)
ans[i]=1;
memset(tans,0,sizeof(tans));
for(int k=2;k<=3;k++)
{
for(i=0;i<Max;i++)
{
for(j=0;i+j<Max;j+=k)
{
tans[i+j]+=ans[i];
}
}
for(i=0;i<Max;i++)
{
ans[i]=tans[i];
tans[i]=0;
}
}
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",ans[n]);
}
return 0;
}
int i,j;
dp[0]=1;
for(i=1;i<=3;i++)
for(j=i;j<=35000;j++)
dp[j]+=dp[j-i];
int n;
while(scanf("%d",&n)!=EOF){
printf("%d\n",dp[n]);
}
return 0;
}
#include <stdlib.h>
#include <string.h>
using namespace std;
{
while(~scanf("%d", &N))
{
int s = N/3+1;
for(int i = 0 ; i <= N/3 ; i++)
{
int t = (N-3*i)/2;
s += t;
}
printf("%d\n", s);
}
return 0;
}
这道题还是比较好看的,我们根据母函数的定义,以及多项式的每一项和系数所表示的含义,我们可以定义母函数G(x)=(1+x+x^2+x^3--------)*(1+x^2+x^4+x^6+x^8--------)*(1+x^3+x^6+x^9--------------),那么我们使用母函数的额展开式对应的指数就是能表示的钱币数,系数就是表示该钱币数的方案数。
所以问题就是求出对应的n的系数就可以了,这个比较简单,就是模拟手工多项式的展开,
#include <cstdlib>
#include <cstdio>
using namespace std;
const int Max=32769;
int ans[Max];
int tans[Max];
int main()
{
int i,j,n;
for(int i=0;i<Max;i++)
ans[i]=1;
memset(tans,0,sizeof(tans));
for(int k=2;k<=3;k++)
{
for(i=0;i<Max;i++)
{
for(j=0;i+j<Max;j+=k)
{
tans[i+j]+=ans[i];
}
}
for(i=0;i<Max;i++)
{
ans[i]=tans[i];
tans[i]=0;
}
}
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",ans[n]);
}
return 0;
}