不知道大家怎么做的,我花了一个小时想算法,后来写了个爆搜找规律。
f[i][j]=f[i-1][j]*j+f[i-1][j-1]*(i+1-j); 后来还是0分,文件名写错了。 |
|
简单动归,蛋疼的是开longint会爆- -! 囧~
dp[i,j]表示前i个有j个上升序列的个数,方程dp[i,j]:=dp[i-1,j-1]*(i-j+1)+dp[a-1,b]*b ,意思是要转移成当前状态需要两种状态转移过来,分别对应加上当前数后序列个数增加和不增加两种情况,边界值dp[i,1]:=1,i∈[1,n]. |
|
如果暴力枚举的话,算出n=20的情况需要15000年
题目 1258 K 上升段
2012-11-08 17:41:41
|
|
由于前一天比赛的原因,我还是写了高精度。。。应该先验证一下要不要写的。。。
|
|
从10X10的表找规律,
然后每个程序现场打表(好浪费……),再输出 |
|
先用 STL 枚举出来一个表(算到 n=12 就出不来了)
1: 1然后找规律 \[ f_{i, j} = (i - j + 1) \times f_{i-1, j-1} + j \times f_{i-1, j} \] 要用 long long ,高精度暂时不必~ |
|
先暴力next_permutation,然后递推。
题目 1258 K 上升段
2012-11-08 15:26:18
|