题目链接: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;
}