一大波水題正在來襲
一道卡精度的坑爹題做法很裸。我們將此題看作一道類似於方格取數的雙程序的dp。容易考慮到,如果由(i,j)跳至(i,j+2),那麼未跳的那個程序必須經過(j+1,x),否則不滿足定義。我們通過這個性質定義一部分的方程。同時,通過這個方法,我們可以保證,1~min(i,j)這一段一定已經取得最小值,而對於乙個最優化的路徑,一定滿足這個情況,也就是我們找到了乙個最優子結構。
#include
#include
#include
#include
#include
using
namespace
std;
#define x first
#define y second
double dis[1001][1001];
pair < double , double > p[1001];
double dp[1001][1001]; //表示每次到了哪兩個點
int n;
double eucdis( int a , int b )
int main()
noip2001組合計數的經典例題。我們定義狀態為dp[i][j],其中第一維是當前的數字的數值,第二維是加了多少個符號。那麼有兩種可能,即:沒有任何劃分部分為一,此時的可能數等於dp[i-j][j],可以形象的看作為i-j劃分為的方案數等於i劃分為。如果有任意部分為一,那麼無論它是否還有一,dp[i-1][j-1]為此時的可能性。對此求和即可。
#include
#include
using
namespace
std;
int n,k;
int dp[201][7];
int main()
一道字首和相關題,不知道為什麼分類在dp下。做法很簡明。我們定義 dp
[i][
j]為以 (i
,j) 為矩形右下頂點的座標。如果這點可以蓋房子,那麼我們只需要討論: 1、d
p[i−
1][j
−1] 外推到dp
[i][
j],即直接以原情況外推。 2、d
p[i]
[j−1
] 與dp
[i−1
][j−
1]二者較小的那個(因為瑕疵可能並不是包括在兩個矩形共同覆蓋的區域裡的)。
那麼方程易推得。這道題其實並不需要存地圖,然而存了也無所謂。
#include
#include
#define min(a,b) ((a)<(b)?a:b)
#define max(a,b) ((a)<(b)?b:a)
intmap[1001][1001],f[1001][1001];
int main()
vijos1011 動態規劃
include include include include using namespace std define forn i,n for int i 0 i n i define for1 i,n for int i 1 i n i int a 505 505 int map 505 505 ...
vijos1476 旅遊規劃 動態規劃
傳送門 題解 我是這麼做的,首先第一遍求出每個點向下的不相交的最長鏈和次長鏈,這樣兩條鏈拼起來就是就是過這個點 不包含他的父親的情況下 的最長鏈。在這些最長鏈中取max就可以得到直徑。然後乙個點在直徑上,要麼他本身就在已經求出的最長鏈上 就是從這個點出發的最長 次長鏈 直徑長度 要麼如果這個點在某一...
vijos1441 打鼴鼠 (動態規劃)
p1441打鼴鼠 accepted 標籤 動態規劃 cscii 鼴鼠是一種很喜歡挖洞的動物,但每過一定的時間,它還是喜歡把頭探出到地面上來透透氣的。根據這個特點阿q編寫了乙個打鼴鼠的遊戲 在乙個n n的網格中,在某些時刻鼴鼠會在某乙個網格探出頭來透透氣。你可以控制乙個機械人來打鼴鼠,如果i時刻鼴鼠在...