蘇塞克島是乙個有著30001個小島的群島,這些小島沿著一條直線均勻間隔分布,從西到東編號為0到30000。眾所周知,這些島上有很多寶石,在蘇塞克島上總共有n顆寶石,並且第i顆寶石位於島 pi上。
小法正好到達0號小島上,他擁有卓越的跳躍能力,能根據以下規則在小島之間向東重複跳躍:
・ 首先,他會從0號島跳到d號島
・ 此後,他會根據以下規則繼續跳躍,l是上一次跳躍的長度,即,如果他上一次跳躍是從島prev島cur,l= cur-prev。他可以向東做一次長度為l-1,l或l+1的跳躍。即,他將會跳到島 (cur + l - 1), (cur + l) 或 (cur + l + 1)(如果這些島存在)。一次跳躍的長度必須是正數,即,當l=1時,他不能做一次長度為0的跳躍,如果沒有有效的目的地,他將會停止跳躍。
小法將會在跳躍的過程中收集到過的島上的寶石。我們要找到小法能收集的寶石的最大數。
樣例解釋:在第乙個樣例中,最優路徑是 0 → 10 (+1寶石 ) → 19 → 27 (+2寶石 ) →...
input
輸入的第一行是兩個以空格隔開的整數n和d (1 ≤ n, d ≤ 30000),分別表示蘇塞克島上的寶石數量和小法第一次跳躍的長度。
接下來n行表示這些寶石的位置,第i行(1 ≤ i ≤ n)包含乙個整pi(d ≤ p1 ≤ p2 ≤
... ≤ pn ≤ 30000),表示包含第i顆寶石的小島的編號。
output
輸出小法能收集的寶石的最大數
sample input
4 10sample output1021
2727
3為什麼dp陣列開500就夠了,我還是不知道,除錯執行的時候dp[30000][30000]非常正常的繼續執行下去了。
特別狗的是dp在清空的時候清0超時,清-1過了。玄學
#include#include#includeusing namespace std;
#define ll long long
int dp[31005][506];
int a[31005];int ans=0;
int maxn=0;
int dfs(int x,int k)
int main()
} dfs(k,k);
printf("%d\n",ans);
return 0;
}
51nod1455 寶石獵人 DP
蘇塞克島是乙個有著30001個小島的群島,這些小島沿著一條直線均勻間隔分布,從西到東編號為0到30000。眾所周知,這些島上有很多寶石,在蘇塞克島上總共有n顆寶石,並且第i顆寶石位於島 pi上。小法正好到達0號小島上,他擁有卓越的跳躍能力,能根據以下規則在小島之間向東重複跳躍 首先,他會從0號島跳到...
51nod 貪心入門
有若干個活動,第i個開始時間和結束時間是 si,fi 活動之間不能交疊,要把活動都安排完,至少需要幾個教室?分析 能否按照之一問題的解法,每個教室安排盡可能多的活動,即按結束時間排序,再貪心選擇不衝突的活動,安排乙個教室之後,剩餘的活動再分配乙個教室,繼續貪心選擇 反例 a 1,2 b 1,4 c ...
51nod 迷宮問題
1459 迷宮遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的...