http://acm.jlu.edu.cn/joj/showproblem.php?pid=2443
我水啊
刚开始想到的方程f[n+1,m] = f[n,m] + f[n,m-1] + … + f[n,m-n];
但是这个方程时间复杂度是O(N^3)。
然后仔细观察,发现f[n+1,m] = f[n,m]+f[n+1,m-1],并且减去f[n,m-n-1];
复杂度是O(N^2)
[code language="cpp"]
void init()
{
memset(f,0,sizeof(f));
f[1][0] = 1;
for(int i=1; i<=1000; i++)
{
int tmp = min(10000,((i+1)*i)/2);
f[i+1][0] = f[i][0];
for(int j = 1; j<= tmp ; j ++)
{
if(j - 1 >= 0)
f[i+1][j] = (f[i][j] + f[i+1][j-1]) % mod;
if(j - i > 0 )
{
f[i+1][j] -= f[i][j-i-1];
if(f[i+1][j] < 0) f[i+1][j] += mod;
}
}
}
}
[/code]