原创 poj1991Turning in Homework(dp)

狀態f [ i ] [ j ] [ 0 ]表示在區間(i+1,j)中都未交作業,現在在 i 位置上,f [ i ] [ j ] [ 1 ]表示在區間(i,j-1)中都未交作業,現在在 j 位置上。 狀態轉移:f[i][j][0]=min(

原创 poj2010Moo University - Financial Aid

要錄取n個,那中位數左右都會有(n-1)/2個。枚舉中位數第i位,左右兩邊預處理出(i-1)前(n-1)/2個最小數的和,(i+1)後(n-1)/2個最小數的和。 我用的是優先隊列。 #include<stdio.h> #include

原创 poj2184Cow Exhibition(01揹包)

一看就是dp題,對於每頭牛,只有取和不取兩種情況,01揹包。 設f [ i ] 表示當智商之和爲 i 時情商之和最多是多少。 但智商之和有可能爲負數,那麼就加上一個常數。 #include<stdio.h> #include<strin

原创 bzoj1578Stock Market(dp)

每天能獲得的最大錢數只與前一天有關。對於手裏每隻股票,前一天可以買或不買。那麼每一天的收益就取決於前一天有多少錢,怎麼買。我們就可以揹包了,體積爲前一天有的錢數,體積爲該股票前一天的價值,利潤爲今天的價值。 設best[ i ]爲第i天的

原创 計算空間

換算關係:1GB=1024MB1MB=1024KB1KB=1024Byte1Byte=8Bit一個字節等於八個位 常用類型數據所佔字節: int 4 long long 8 unsigned long long 8 float 4 dou

原创 Gopher II(二分圖最大匹配)

1538:Gopher II 總時間限制: 2000ms 內存限制: 65536kB 描述The gopher family, having averted the canine threat, must face a new p

原创 BZOJ1574 USACO 2009 Jan Gold 1.Earthquake Damage Solution

要想被截掉的點越少,最優方案就是不可行點周圍的點都損壞。然後bfs一下求出從1能到達的點,剩下的就是不能的了。 一定要注意:這是圖,不是樹!有可能有自環,有重邊。 #include<stdio.h> #include<string.h>

原创 bzoj1782: [Usaco2010 Feb]slowdown 慢慢遊

應該是樹上搜索,但因爲順序不同而且情況會改變,搜索回溯什麼的並不好使。 不過能發現,每一次更改對後面有影響,我們可以把影響記下來,用到線段樹。 先用dfs找一遍每個點影響的範圍,每走一次整個區間都加1。還是需要畫一畫的。 #includ

原创 codeforces 590D Top Secret Task(dp)

狀態:f [ i ][ j ]表示前i個點換了j次的最小和 轉移:用f [ i ][ j ]更新f [ i+1 ][ j+k-i-1](k爲i後一點) #include<stdio.h> #include<string.h> #incl

原创 codeforces 543A Writing Code (dp)

一開始想到的dp: f [ i ][ j ][ k ]表示前i個人打了j行有k個錯誤的方案數,那麼轉移方程爲:f [ i ][ j ][ k ]=f [ i-1][ j-h ][ k-a[i]*h ] (0<=h<=j) 很明顯超時+ML

原创 bzoj4247: 掛飾(01揹包)

狀態:f[ i ][ j ]表示選到第 i 個物品時還剩 j 個勾 轉移:f[i][j]=max(f[i-1][j-edge[i].gou+1>1?j-edge[i].gou+1:1]+edge[i].val,f[i-1][j]); 注意

原创 分成互質組

描述 給定n個正整數,將它們分組,使得每組中任意兩個數互質。至少要分成多少個組? 輸入 第一行是一個正整數n。1 <= n <= 10。 第二行是n個不大於10000的正整數。 輸出 一個正整數,即

原创 字符串hash,bzoj2795[Poi2012]A Horrible Poem

unsigned int BKDRHash(char *str) { unsigned int seed = 131; // 31 131 1313 13131 131313 etc.. unsigned int hash

原创 bzoj2442: [Usaco2011 Open]修剪草坪(單調隊列優化dp)

正常的dp公式爲dp[i]=max dp[j]+sum[i]-sum[j+1],(j+1不取,j在i-k-1~i-2),爲了dp[i]最大,那麼使dp[j]-sum[j+1]最大,用單調隊列維護。#inc

原创 bzoj1375[Baltic2002]Bicriterial routing 雙調路徑

分層圖,dp。本題求的是多少種方案,不是多少個路徑。。。 dp[i][j]表示到第i點時用了j時間所花的錢數。 注意:走過最長的路徑是(n-1)*100,否則會爆!!! #include<stdio.h> #include<string