time limit: 1000ms memory limit: 10000k
total submissions: 16271 accepted: 5427
description
「help jimmy」 是在下圖所示的場景上完成的遊戲。
場景中包括多個長度和高度各不相同的平台。地面是最低的平台,高度為零,長度無限。
jimmy老鼠在時刻0從高於所有平台的某處開始下落,它的下落速度始終為1公尺/秒。當jimmy落到某個平台上時,遊戲者選擇讓它向左還是向右跑,它跑動的速度也是1公尺/秒。當jimmy跑到平台的邊緣時,開始繼續下落。jimmy每次下落的高度不能超過max公尺,不然就會摔死,遊戲也會結束。
設計乙個程式,計算jimmy到底地面時可能的最早時間。
input
第一行是測試資料的組數t(0 <= t <= 20)。每組測試資料的第一行是四個整數n,x,y,max,用空格分隔。n是平台的數目(不包括地面),x和y是jimmy開始下落的位置的橫豎座標,max是一次下落的最大高度。接下來的n行每行描述乙個平台,包括三個整數,x1[i],x2[i]和h[i]。h[i]表示平台的高度,x1[i]和x2[i]表示平台左右端點的橫座標。1 <= n <= 1000,-20000 <= x, x1[i], x2[i] <= 20000,0 < h[i] < y <= 20000(i = 1…n)。所有座標的單位都是公尺。
jimmy的大小和平台的厚度均忽略不計。如果jimmy恰好落在某個平台的邊緣,被視為落在平台上。所有的平台均不重疊或相連。測試資料保證問題一定有解。
output
對輸入的每組測試資料,輸出乙個整數,jimmy到底地面時可能的最早時間。
sample input
13 8 17 20
0 10 8
0 10 13
4 14 3
sample output
思路:dfs暴搜+剪枝
d p[
i][0
]dp[i][0]
dp[i][
0]標記左邊,dp[
i][1
]dp[i][1]
dp[i][
1]標記右邊最短到達時間
#include
#include
#include
#include
#include
using namespace std;
#define inf 0x3f3f3f3f
struct node a[
1005];
bool cmp
(node a,node b)
int ans;
int dp[
1005][
2];int mh,n;
void
dfs(
int x,
int y,
int loc,
int sec)
//cout<
(int i=loc+
1; i<=n+
1; i++)if
(sec+a[i]
.h>ans)
//if(dp[i]>=sec)else
if(sec+x-a[i]
.x1])
if(sec+a[i]
.x2-x
])break;}
}}intmain()
sort
(a+1
,a+1
+n,cmp)
; a[0]
.h=y;
a[n+1]
.x1=
-20000
; a[n+1]
.x2=
20000
; a[n+1]
.h=0
; dp[0]
[0]=
0;dp[0]
[1]=
0;dfs(x,y,0,
0);printf
("%d\n"
,ans);}
return0;
}
poj 1661 動態規劃 拯救老鼠
題幹在最後 首先承認這道題用了我很多的時間,作為乙個動態規劃入門者兼vj新手,這道題對我來講是比較有難度的。感想就是,設定判斷條件時,一定要考慮全面,不要怕 長 然後就是,對於動態規劃,不應只把他當作一種套路甚至是解體模版 這樣的話,你就總是想 拿條件,套公式 對於dp,這種思想是危險而又行不同的。...
P1120 暴搜 剪枝
不是題解!不是題解!不是題解!重要的事情說三遍!純屬個人學習筆記!傳送門 p1120 ac include using namespace std int s 100 vis 100 next1 100 bool ok int number,len int sum inline intread wh...
hdu6341 DFS暴搜 剪枝
題意 給乙個16 16的矩陣,由16個4 4的小矩陣構成。問最少將給出矩陣中的小矩陣順時針旋轉幾次可以滿足數獨條件 每一行 每一列 每乙個小矩陣都由1 f組成 思路 暴力列舉每個矩陣旋轉0 3次後的樣子,在每次旋轉填完後判斷當前矩陣是否合法 剪枝 include includeusing names...