狀壓DP cofun1623 壽司晚宴

2021-08-09 07:12:15 字數 1772 閱讀 7418

輸入樣例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表示本行...