又想吐槽一下了...同样是DP,差别咋就那么大呢?

题目链接: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;
#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;
}
当你试图了解你的祖国时,你已踏上了犯罪的路程。
原文地址:https://www.cnblogs.com/modiz/p/3039707.html