神秘人很高興,決定給 tt 乙個獎勵,即白日做夢之撿貓咪遊戲。
撿貓咪遊戲是這樣的,貓咪從天上往下掉,且只會掉在 [0, 10] 範圍內,具體的座標範圍如下圖所示。
tt 初始站在位置五上,且每秒只能在移動不超過一公尺的範圍內接住掉落的貓咪,如果沒有接住,貓咪就會跑掉。例如,在剛開始的一秒內,tt 只能接到
四、五、六這三個位置其中乙個位置的貓咪。
喜愛貓咪的 tt 想要接住盡可能多的貓咪,你能幫幫他嗎?
input
多組樣例。每組樣例輸入乙個 m (0 < m < 100000),表示有 m 只貓咪。
在接下來的 m 行中,每行有兩個整數 a b (0 < b < 100000),表示在第 b 秒的時候有乙隻貓咪掉落在 a 點上。
注意,同乙個點上同一秒可能掉落多隻貓咪。m = 0 時輸入結束。
output
輸出乙個整數 x,表示 tt 可能接住的最多的貓咪數。
sample input
65 1
4 16 1
7 27 2
8 30
sample output
4題目分析:
這個題目的資料就比較正常了,這裡用的是動態規劃的方法。我們需要用乙個陣列dp[i][j]來表示第i秒第j點所有的最大貓咪數目。
int dp[
100001][
11];
初始的時候我們要把有貓咪的地方個數++,然後要找到哪乙個時間是最大的,我們從最大時間往前找到0秒,然後找每乙個位置可能的情況。
int mn=
-114514
;for
(int i=
0;i)
對於每乙個情況而言,能捕捉到左右和中間三個格仔的貓咪,那麼這裡獲得的貓咪數的最大值就是包括原點的周圍三個點的貓咪數目的最大值,多個數的最大值就是max函式的巢狀,畢竟max有交換律和結合律,不管是誰先誰後都一樣。
dp[i]
[j]=dp[i]
[j]+
max(dp[i+1]
[j-1],
max(dp[i+1]
[j],dp[i+1]
[j+1])
);
對於邊上兩個點,那就是他和附近乙個點共兩個點的情況了,這要單獨的列出來。
dp[i][0
]=dp[i][0
]+max(dp[i+1]
[0], dp[i+1]
[1])
; dp[i][10
]=dp[i][10
]+max(dp[i+1]
[10],dp[i+1]
[9])
;
最終的結果就是第0秒(我們的時間是倒著數的)第5個位置(就是原始位置)。
cout<
[5]<
**如下:
#include
#include
using
namespace std;
int dp[
100001][
11];int
main()
memset
(dp,0,
sizeof
(dp));
int mn=
-114514
;for
(int i=
0;i)for
(int i=mn-
1;i>=
0;i--
) dp[i][0
]=dp[i][0
]+max(dp[i+1]
[0], dp[i+1]
[1])
; dp[i][10
]=dp[i][10
]+max(dp[i+1]
[10],dp[i+1]
[9])
;}cout<
[5]<
}}
第十三周作業 3
includeusing namespace std class shape class circle public shape virtual float area const protected float radius float circle area const class rectang...
第十三周作業 必做題部分
一 題目 這一天,tt 遇到了乙個神秘人。神秘人給了兩個數字,分別表示 n 和 k,並要求 tt 給出 k 個奇偶性相同的正整數,使得其和等於 n。例如 n 10,k 3,答案可以為 4 2 4 tt 覺得這個任務太簡單了,不願意做,你能幫他完成嗎?本題是spj 二 輸入 第一行乙個整數 t,表示資...
第十三周作業 2
程式頭部注釋開始 為避免提交博文中遇到的問題,將用於表明注釋的斜槓刪除了 程式的版權和版本宣告部分 檔名稱 求值 作 者 王智凱 完成日期 2011 年 11 月 17 日 版 本號 凱凱 對任務及求解方法的描述部分 輸入描述 無 問題描述 自定義函式,用泰勒公式實現計算sin和cos的近似值,要求...