题目链接:http://openoj.awaysoft.com:8080/judge/contest/view.action?cid=397#problem/I


#include <stdio.h>
int f[1010];
void DP()
{
f[1]=1;
f[2]=1;
f[3]=2;
f[4]=3;
for (int i=5;i<1001;i++)
for (int j=1;j<i;j++)
if ((i-1) % j==0)
{
f[i]+=f[j];
f[i]%=1000000007;
}
}
int main()
{
int n,t=0;
DP();
while (~scanf("%d",&n))
printf("Case %d: %d\n",++t,f[n]);
return 0;
}
int f[1010];
void DP()
{
f[1]=1;
f[2]=1;
f[3]=2;
f[4]=3;
for (int i=5;i<1001;i++)
for (int j=1;j<i;j++)
if ((i-1) % j==0)
{
f[i]+=f[j];
f[i]%=1000000007;
}
}
int main()
{
int n,t=0;
DP();
while (~scanf("%d",&n))
printf("Case %d: %d\n",++t,f[n]);
return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
long long f[1010][1010];
void Wtf(int x,int y)
{
int yt = y+1;
while(yt--)
{
if(yt == 0)
return;
if(y%yt == 0)
{
if((x-y) >= yt)
f[x][y] += f[x-y][yt];
}
}
}
int main()
{
memset(f,0,sizeof(f));
for(int i=1;i<=1000;i++)
{
f[i][1] = 1;
}
for(int i=1;i<=1000;i++)
{
for(int j=2;j<=1000;j++)
{
Wtf(i,j);
}
}
long long n;
int t=1;
while(~scanf("%lld",&n))
{
long long sum = 1;
for(int i=2;i<n;i++)
{
sum += f[n][i];
sum %= 1000000007;
}
printf("Case %d: %lld\n",t++,sum);
}
return 0;
}
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
long long f[1010][1010];
void Wtf(int x,int y)
{
int yt = y+1;
while(yt--)
{
if(yt == 0)
return;
if(y%yt == 0)
{
if((x-y) >= yt)
f[x][y] += f[x-y][yt];
}
}
}
int main()
{
memset(f,0,sizeof(f));
for(int i=1;i<=1000;i++)
{
f[i][1] = 1;
}
for(int i=1;i<=1000;i++)
{
for(int j=2;j<=1000;j++)
{
Wtf(i,j);
}
}
long long n;
int t=1;
while(~scanf("%lld",&n))
{
long long sum = 1;
for(int i=2;i<n;i++)
{
sum += f[n][i];
sum %= 1000000007;
}
printf("Case %d: %lld\n",t++,sum);
}
return 0;
}