總時間限制:
20000ms
單個測試點時間限制:
10000ms
記憶體限制:
65536kb
描述
雷濤同學非常的有愛心,在他的宿舍裡,養著乙隻因為受傷被救助的小貓(當然,這樣的行為是違反學生宿舍管理條例的)。在他的照顧下,小貓很快恢復了健康,並且愈發的活潑可愛了。
可是有一天,雷濤下課回到寢室,卻發現小貓不見了!經過一番尋找,才發現她正趴在陽台上對窗外的柿子樹發呆…
在北京大學的校園裡,有許多柿子樹,在雷濤所在的宿舍樓前,就有n棵。並且這n棵柿子樹每棵的高度都是h。冬天的寒冷漸漸籠罩了大地,樹上的葉子漸漸掉光了,只剩下乙個個黃澄澄的柿子,看著非常喜人。而雷濤的小貓恰好非常的愛吃柿子,看著窗外樹上的柿子,她十分眼饞,於是決定利用自己敏捷的跳躍能力跳到樹上去吃柿子。
小貓可以從宿舍的陽台上跳到窗外任意一棵柿子樹的樹頂。之後,她每次都可以在當前位置沿著當前所在的柿子樹向下跳1單位距離。當然,小貓的能力遠不止如此,她還可以在樹之間跳躍。每次她都可以從當前這棵樹跳到另外的任意一棵,在這個過程中,她的高度會下降delta單位距離。每個時刻,只要她所在的位置有柿子,她就可以吃掉。整個「吃柿子行動」一直到小貓落到地面上為止。
雷濤調查了所有柿子樹上柿子的生長情況。他很想知道,小貓從陽台出發,最多能吃到多少柿子?他知道寫乙個程式可以很容易的解決這個問題,但是他現在懶於寫任何**。於是,現在你的任務就是幫助雷濤寫乙個這樣的程式。
圖為n = 3, h = 10, delta = 2的乙個例子。小貓按照圖示路線進行跳躍,可以吃到最多的8個柿子
輸入輸入檔案的第一行有三個以空格分隔的整數,分別代表n, h, delta
接下來的n行,每行第乙個整數為ni
,代表第i棵樹上的柿子數量。
接下來是ni
個整數,每個整數tij
代表第i棵柿子樹的tij
高度上長有乙個柿子。
輸出輸出僅包含乙個整數,即小貓最多吃到的柿子數。
樣例輸入
3 10 2樣例輸出3 1 4 10
6 3 5 9 7 8 9
5 4 5 3 6 9
8提示
1 ≤ n, h ≤ 2000
0 ≤ ni
≤ 5000
1 ≤ delta ≤ n, 1 ≤ tij
≤ h輸入檔案大小不大於40960kb
**excalibur, 2008
#include
#include
#include
using namespace std;
int f[2100][2100],num[2100][2100];
int n,m,delta,i,j,k;
int max1[2100],max2[2100];
int num1[2100],num2[2100];
int ans;
int main()
}
f[0][0];
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
if (f[j][i]>max1[i])
else
if (f[j][i]>max2[i])
}for (int l=1;l<=n;l++)
if (f[l][m]>ans)
ans=f[l][m];
cout<
這道題剛開始寫的三重迴圈結果超時了,後來思考後發現其實第三重完全沒必要,原本第三重是列舉它是從哪棵樹樹跳到了當前點,但是因為它可以跳到任意一棵樹,所以只需要記錄一下每一層的最大值即可,不必列舉。但是還有一點要注意就是它不可以從當前這棵樹下降delta高度,所以還需要儲存一下次大值,這樣進行動態規劃即可。
雷濤的小貓題解
雷濤同學非常的有愛心,在他的宿舍裡,養著乙隻因為受傷被救助的小貓 當然,這樣的行為是違反學生宿舍管理條例的 在他的照顧下,小貓很快恢復了健康,並且愈發的活潑可愛了。可是有一天,雷濤下課回到寢室,卻發現小貓不見了!經過一番尋找,才發現她正趴在陽台上對窗外的柿子樹發呆 在北京大學的校園裡,有許多柿子樹,...
bzoj1207 雷濤的小貓
有n 5000 棵柿子樹,每棵上面都有若干柿子且每棵樹高度均為h 5000 現在要從樹頂開始吃柿子,每次可以使自己的高度下降1,但是所在的樹沒變,或者換到任意一棵樹上,但是高度會降低delta,問到達地面 高度為0 時,最多能吃多少柿子 讀題之後,首先想到乙個最樸素的df 設f i j 表示當高度為...
BJWC2008 雷濤的小貓
嘟嘟嘟 dp。剛開始我想的是dp i j 表示在第 i 棵樹上,高度為h能吃到的最多的果子,如此能得到轉移方程 dp i j max dp i j 1 dp k j derta k 1 n k i 但因為這樣寫會導致dp k j derta k i 的部分沒有更新,所以應該把dp試的兩胃交換一下。這...