好久木有更新了,感覺都有點陌生了,上個月因為各種奇怪的事情都沒有好好刷過題,做過的題也沒好好總結,so,這個月再好好努力!
題目傳送:uva - 11270 - tiling dominoes
基礎的輪廓線動態規劃。
ac**:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define inf 0x7fffffff
using
namespace
std;
int n, m, cur;
ll dp[2][1
<< 11];//滾動陣列,第二維開到11就好了,不然tle。
void update(int a, int b)
int main() }}
printf("%lld\n", dp[cur][(1
<< m) - 1]);
}return
0;}
題目傳送:hdu - 4804 - campus design
13年南京賽區銀牌題。
輪廓線動態規劃或者插頭dp。
其實就是上一題的變形。
只不過編碼的時候要注意很多細節,對思維能力和程式設計能力都有提高。
ac**:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define inf 0x7fffffff
using
namespace
std;
#define mod 1000000007
int n, m, c, d;
int cur;
char mp[105][25];
int dp[2][1
<< 11][22];//注意這裡應該開到22,不然會wa。
void update(int a, int b, int c, int d)
}int main()
memset(dp, 0, sizeof(dp));
int tot = (1
<< m) - 1;
cur = 0;
dp[0][tot][0] = 1;
for(int i = 0; i < n; i ++) }}
else }}
}}
int ans = 0;
for(int i = c; i <= d; i ++)
printf("%d\n", ans);
}return
0;}
輪廓線動態規劃
這類問題的共同特點是 在乙個比較 窄 的棋盤上進行複雜操作。如果採用傳統方法 以整行整列為狀態 進行動態規劃,將無法進行狀態轉移,因此只能把參差不齊的 輪廓線 作為狀態的一部分。儘管輪廓線的形態複雜,但由於棋盤比較窄,狀態總數仍然可以控制在可以接受的範圍內。直接看例題 1,鋪放骨牌 用1 2骨牌覆蓋...
大樓輪廓線
輸入第一行乙個數表示有n座大樓,後面依次輸入n行,每一行表示大樓的起始點,終點和高度,輸出為大樓輪廓資訊 如下圖 第一行輸出為3 後面有三行輸入表示大樓的資訊 第二行為 1 3 3 第三行為 2 4 4 第三行為 5 6 1 輸出大樓輪廓資訊 第一行 1 2 3 第二行 2 4 4 第三行 5 6 ...
hdu2167 輪廓線動態規劃
輸入比較難處理,周圍8格數字不可取。因為必須要記錄當前格左上角的數字有沒有取得情況,所以所以要在一般的輪廓線上加一位,並且換行時要更新一下狀態。如下圖 狀態記錄及轉移 在取11格的數字時,我們需要判斷10,6,7,8格是否有取數字。在更新11格的狀態的同時,丟棄掉第6格的狀態值。在遇到換行時,第8格...