练习备份5

#include<stdio.h>
#define maxn 1001
int flag=0;
long long f[2][maxn*maxn];
void DP(int n)
{
    f[flag][0]=1;
    for(int i=1;i<n;i++)
    {
        flag=1-flag;
        for(int j=0;j<=i*(i+1)/2;j++)
        {
            if(i>j) f[flag][j]=f[1-flag][j];
            else if(i<=j) f[flag][j]=f[1-flag][j-i]+f[1-flag][j];
            f[flag][j]%=100000007;
        }    
    }    
} 
int main(void)
{
    int n,s,a,b;
    long long temp,cnt=0;
    scanf("%d%d%d%d",&n,&s,&a,&b);
    DP(n);
    for(long long i=0;i<=n*(n-1)/2;i++)
    {
        temp=s+b*(n-1)*n/2-b*i-a*i;
        if(temp%n==0)
        {
            cnt+=f[flag][i];
            cnt%=100000007;
        }
    }
    printf("%lld",cnt);
    return 0;
}
原文地址:https://www.cnblogs.com/zuimeiyujianni/p/8889605.html