輸入樣例1
3 10000
輸入樣例2
4 10000
輸入樣例3
100 100000000
sample output
樣例輸出1
9 樣例輸出2
21 樣例輸出3
【做這題的時候看了dalao們的題解,感覺不是很能理解,還是自己打舒服~
#include
using
namespace
std;
const
int su[8] = ;
struct infoe[505];
long
long n, m, p, i, j, k, ans, dp[2][1
<< 8][1
<< 8], f[1
<< 8][1
<< 8];
inline
int read()
while(ch >= '0' && ch <= '9')
x = x * 10 + ch - '0', ch = getchar();
return x * w;
} //讀入優化
inline
void write(long
long x)
//輸出優化
bool cmp(info a, info b)
int main()
e[m].da = k;
}sort(e + 1, e + m + 1, cmp);
//把美味度的質因子壓進二進位制並按大質數排序1.&2.
f[0][0] = 1;
for(i = 1; i <= m; i ++)
//新出現的大質數不歸入集合g與m
for(j = (1
<< 8) - 1; j >= 0; j --)
for(k = (1
<< 8) - 1; k >= 0; k --)
//新出現的大質數歸入集合g或m,同時將小質數的狀態進行狀壓dp
if (e[i].da == 1 || e[i].da != e[i + 1].da)
for(j = 0; j < 1
<< 8; j ++)
for(k = 0; k < 1
<< 8; k ++)
f[j][k] = ((dp[0][j][k] - f[j][k]) % p + dp[1][j][k] + p) % p;
//將兩種平行的情況歸併
}//dp3.
for(j = 0; j < 1
<< 8; j ++)
for(k = 0; k < 1
<< 8; k ++)
if (! (j & k))
ans = (ans + f[j][k]) % p;
//統計答案
write(ans);
//輸出
return
0; }
下午好咩咩咩鹿啦啦~ 狀壓DP cofun1895 隊伍統計
description 現在有n個人要排成一列,編號為1 n 但由於一些不明原因的關係,人與人之間可能存在一些矛盾關係,具體有m條矛盾關係 u,v 表示編號為u的人想要排在編號為v的人前面。要使得隊伍和諧,最多不能違背k條矛盾關係 即不能有超過k條矛盾關係 u,v 滿足最後v排在了u前面 問有多少合...
狀壓dp 玉公尺田 狀壓dp
相關 強相關 327.玉公尺田 狀壓dp 小國王 狀壓dp 是井字形,本題是十字形。思路 狀態計算 時間複雜度 n 2 n 2n o n 22n 12 2 24n 2 n 2 n o n2 12 2 n 2n 2 n o n22n 12 224 看著妥妥超時,但是裡面合法狀態很少 依舊可以過 在此,...
狀壓dp小記
鋪磚 題意 現有nm的一塊地板,需要用12的磚塊去鋪滿,中間不能留有空隙。問這樣方案有多少種 include using namespace std typedef long long ll const int maxn 1 11 int n,m,state ll dp 15 maxn s1表示本行...