hdu1421 poj2228hdu2577 這三個題目是最近做到的比較有特點的一類 由於某一些條件 比如取了乙個東西 相鄰的東西就會有所改變 那麼一般會在樸素的轉移方程上再加一維狀態 0 1 代表對這一項不操作或者操作然後再從這個狀態的意義出發推方程 會相對好做一些
hdu1421 搬寢室 經典dp模型 分析一下可以轉化為 n個有序數字 取k個相鄰的兩個數字 代價是這兩個數字的差的平方
一開始想了很久 感覺還有點像區間dp 後來仔細一想不管複雜度還是狀態都是不好做 經過大神指點 dp[i][j]代表前i個數字取j個相鄰的兩個數字 然後加一維[0][1]分別代表取與不取 然後推出方程
dp[i][j][0] = min( dp[i-1][ j ][ 0 ] ,dp[ i - 1 ][ j ][1] )
dp[i][j][1] = dp[i-1][j-1][0] + (num[i] - num[i-1]) * (num[ i ] - num[i - 1])
然後再仔細一看發現[1]這個狀態是固定的可以遞推出來的 帶進去可以把dp[ i ][ j ][ 1 ]消去,
**如下(**裡面我沒有把狀態[ 1 ]都消去)
#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
const int inf=0x3f3f3f3f;
const int mod=1e9+7;
const double pi=acos(-1.0);
#define clri(x) memset(x,-1,sizeof(x))
#define clr0(x) memset(x,0,sizeof x)
#define clr1(x) memset(x,inf,sizeof x)
#define clr2(x) memset(x,-inf,sizeof x)
#define writeln(x) cout<>x
#define long long long
#define rep(a,b,c) for(long a=b;a<=c;a++ )
#define rrep(a,b,c) for(long a=b;a>=c;a--)
#define eps 1e-10
int dp[2010][1005][2]; //0代表以i結尾的東西要搬 1代表不搬
int num[2200];
int minx[2200];
int main()
printf("%d\n",min(dp[n][k][0],dp[n][k][1]));
}}
poj2228 講的是一頭母牛睡覺的故事 總的來說 給n個數字 取m個數字 但是如果是某一連續段中第乙個取的話 這個數字的值是不加到總的res裡面的 比如1 2 3 4 5 6 我們選4 5 6 ,4是不加進去的 如果單獨選6 ,6也是不加進去的 還有比較麻煩的是環形情況 這個地方跟上面一樣 加一維,可以推出方程
dp[i][j][0]=max(dp[i-1][j][1] , dp[i-1][j][0]);
dp[i][j][1]=max(dp[i-1][j-1][1]+uti[i] , dp[i-1][j-1][0]);
dp[i][j][0,1]代表前i個數字取了j個數字且第j個數字不取或者取的最優解 由於環形情況**混亂 就不貼**了
hdu2577 比較簡單的dp 列印一些大寫或者小寫字母 可以用capslock 也可以用shift 問怎麼樣使得打字次數最少
同樣的dp[i][0,1]代表前i個按lock或者shift的最優解
然後進行方程轉移
if(str[i-1]>='a'&&str[i-1]<='z')
else
感覺做了有一些dp 但是還不夠敏感 應該繼續加強訓練 區間DP總結(一)
noip2000提高 乘積最大 需要用到高精度,目前還不會。noip2006提高組 能量項鍊 noi1995 石子合併 經典區間dp poj1141 brackets sequence 括號匹配 值得細看的部落格 動態規劃之區間dp專題 1 石子合併題目 區間dp模板。include define ...
棋盤式狀壓DP模型總結
狀壓dp分兩大類,一類是集合式,另一類就是棋盤式 即基於連通性 其中,集合式狀壓dp難度相較後者略大,形式複雜多變。而棋盤式狀壓dp的題目樣式都相差不多,解法也都殊途同歸,因此將這一類題進行總結,不難歸結出一套解題模板。我們先看以下三個例題。題目鏈結 狀態表示 f i,j,s 表示已經在前i行放了j...
學習動態規劃DP(一) DAG模型
之前初學了一點關於動態規劃的知識,但沒有系統的學習,最近在空閒時間根據紫書 演算法競賽入門經典 開始了比較有計畫的學習,先寫下這篇部落格,作為筆記。一 我對動態規劃的看法。動態規劃,即是把原問題劃分為各個規模更小的問題去解決,原問題的最優解包括了各個子問題的最優解 感覺本質上是分治法 所以動態規劃用...