NOIP模擬 偷書(狀壓DP)

2021-08-28 15:14:24 字數 939 閱讀 2129

在l的書架上,有 n本精彩絕倫的書籍,每本書價值不菲。

m 是乙個書籍愛好者,他對 l 的書籍早就垂涎三尺。最後他忍受不了**,覺得去偷 l 的書,為了迅速完成這件事,同時他不希望 l 很快發現書籍少了,他決定偷書時,對於任意連續的 k 本書,他最多選 b 本,最少選 a 本。現在他想知道怎麼選出來的書本最後使得偷的書籍的價值和,與剩下的書籍價值和,差值最大。

第一行四個整數 n,k,a,b

一行 n 個整數表示每本書的價值 

乙個整數表示答案

2 1 0 1

2 -2

4對於 20%:n<=10 

對於另外 20%:a=0,b=k

對於 100%:n<=1000,0<=a<=b<=k<=10,所有書籍的價值的絕對值<=10^9

一看到k<=10,這麼小的資料簡直就是宣告這是一道狀壓dp的題,那麼就定義乙個陣列dp[i][j],其中i表示前i個,狀態為j(包含第i個)的最大價值,易得對於每個合法dp[i][j],均可從dp[i-1][j>>1]和dp[i-1][(j>>1)|(1<#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const ll maxn=1<<11;

const ll inf=0x3f3f3f3f;

ll dp[1001][maxn];

ll n,k,a,b;

ll val[1001];

bool che[maxn];

ll read()

void pre()

if(cnt>=a&&cnt<=b)

che[i]=true; }}

int main()

else

}} }

for(ll i=0;icout

}

NOIP模擬 乘積(狀壓DP)

題意 選擇不超過 k 個 n以內的正整數撐起來,使得乘積是乙個無平方因子數 不能夠被任意乙個質數的平方整除 一共有多少種取法?n 500,k 500 題解 首先,很容易想到狀壓,壓縮當前已經選過某質數的狀態。對於質數個數小於 20 可以直接過,但是問題是現在 n 以內的質數個數很多,無法壓縮。考慮狀...

NOIP模擬 乘積 狀壓dp 多組揹包

題目大意 選擇不超過k個n以內的正整數相乘,使乘積使乙個無平方因子數,問有多少種取法?每個數只能取一次 1 k,n 500 解題思路 首先可以想到把有平方因子數的數刪了。那問題也就變成了使取得的數的質因數集合無交集。如果質因數個數足夠少,我們就可以狀壓記錄每個質數取還是沒取,但500的範圍太大。不過...

NOI P模擬賽 奶油蛋糕塔(狀壓 DP)

資料範圍1 n 5 1 051 leq n leq5 times10 5 1 n 5 105 n 20 n leq 20 n 20 的狀壓應該都會吧,狀態記錄已經選了的蛋糕集合,以及蛋糕序列的尾部奶油,然後列舉蛋糕轉移。總共有 10 1010 種不同的蛋糕,資料很小。把最後的蛋糕塔等效為乙個序列,如...