複習動規(1)

2022-03-30 08:04:37 字數 2498 閱讀 6148

今天是7月13號,現在打算衝國銀。

從現在到國賽前,每天會複習或學習知識點。

今天是複習動態規劃。

第一道,[noi2001]炮兵陣地。很明顯也很好寫的狀壓dp。

dp[i][j][k]是第i行狀態為j,第i-1行狀態為k的方案數,再列舉一重狀態即可。挺經典。

第二道,[sdoi2009]bill的挑戰。定義的陣列稍微有點不一樣。

預處理時有個輔助陣列f[i][j],指第i位的字元可以為j的字串的集合。

dp[i][j]指的是當前做到字串第i位,滿足條件的字串的集合為j的方案數。

最後求值的時候要判斷j中1的個數剛好等於k。

第三道,[noi2015]壽司晚宴。原題可轉化為「將2~n中的部分數字分為兩組,乙個組中的所有數的質因數集合與另乙個組的質因數集合無交集」。

這樣我們就可以想到設dp[i][j]指a組的質因數集合為i,b組的質因數集合為j(i&j!=0)。再遍歷每個數可以放入a組或b組或不放。

然後發現每個數大於22的質因數至多乙個,把它拎出並用它排序,保證大於22的質因數相同的一些數在一起。

再設fa[i][j],fb[i][j],初值設為dp[i][j],定義和dp[i][j]一樣,但是乙個專門放入a組,乙個專門放入b組。

質因數相同的一些數弄完之後,dp[i][j]=fa[i][j]+fb[i][j]-dp[i][j]。因為fa和fb是包括了dp初值的,所以dp[i][j]=專門放入a組+專門放入b組+不放入任何一組。

具體看**實現:

#include#define ll long long

using

namespace

std;

int n,p[11]=;

ll p,ans,dp[

261][261],fa[261][261],fb[261][261

];struct

noda[

510];

bool

operator>(nod aa,nod bb)

bool

operator

int main()

a[i].h=x;

}sort(a+2,a+1+n);

dp[0][0]=1

;

for(int i=2;i<=n;i++)

for(int j=255,t;j>=0;j--)

for(int k=j;k>=0;k=(k-1)&j)

if(a[i].h!=a[i+1].h||a[i].h==1

)

for(int j=255,t;j>=0;j--)

for(int k=j;k>=0;k=(k-1)&j)

}for(int j=255;j>=0;j--)

for(int k=j;k>=0;k=(k-1)&j)

printf(

"%lld\n

",ans);

return0;

}

[noi2015]壽司晚宴

第一道,跑路。是有點水,好像和動規沒關係?先把一步能到達的路連起來再floyd就完事了。

第一道,[noi2011]noi 嘉年華。

首先將時間離散化,並設f[i][j],g[i][j],表示1~i的時間內第乙個嘉年華有j個活動時的第二個嘉年華最大活動數,i~t的時間內第乙個嘉年華有j個活動時的第二個嘉年華最大活動數。

再預處理d[i][j]指i~j時間內的所有活動數,即可o(n3)dp出f[i][j],g[i][j],其中max為第乙個答案。

要使第i個活動必須舉辦,則設dp[i][j]為i~j時間內的活動必須舉辦的最佳答案,第i+1個答案就是max(1<=l<=s[i],s[i]+t[i]<=r<=t)。

接下來只要求出dp[l][r]就可以了,可知dp[l][r]=max。(x指l左邊的在第乙個嘉年華的活動數,y指r右邊的在第乙個嘉年華的活動數)

乍一看要o(n4),事實上發現x越大,y的最佳值越小,所以利用單調性就可以優化一重時間複雜度。對了,要注意細節。

具體看**實現:

#includeusing

namespace

std;

int n,ct,ans,s[210],t[210],b[410],d[410][410],f[410][210],g[410][210],dp[410][410

];map

q;int max(int x,int y)

int min(int x,int y)

intrd()

intmain()

}for(int i=1;i<=n;i++)

return0;

}

[noi2011]noi嘉年華

今天就寫了這麼多,明天加油吧。

複習動規(3)

繼續複習動規。第一道,scoi2010 交易。看起來限制多,其實就是紙老虎。可設f i j 指第i天擁有j張 所賺的最大錢數,所以f i j 可為負,所以初值設為 inf。四種情況 1.什麼都不買,f i j max 2.第一次買,f i j max 0 j asi 3.之後的買,f i j max...

Employment Planning 動規小練

employment planning 原題鏈結 對於當前月份所需人數,和僱傭最大所需人數之間的情況進行討論。由於解雇金額和僱傭金額的存在,會存在一次性僱傭更多的人以減少解雇金額的情況,所以要討論到所需最大人數。include include include include include incl...

2016 7 13 樹形動規

rmq演算法講完沒幾個小時,我們就開始了小紫中的一節 足見這個演算法很重要 樹形動歸 1.焦作一中資訊學oy 2.小黃 資訊學奧賽一本通 3.小紫 演算法競賽入門經典第二版 題型總結 來自資料1 1 加分二叉樹 區間動規 樹的遍歷 2 二叉蘋果樹 二叉樹上的動規 3 最大利潤 多叉樹上的動規 4 選...