BZOJ 1270 雷濤的小貓 dp

2022-07-17 11:00:16 字數 2208 閱讀 3643

題目大意:

雷濤的小貓雷濤同學非常的有愛心,在他的宿舍裡,養著乙隻因為受傷被救助的小貓(當然,這樣的行為是違反學生宿舍管理條例的)。  在他的照顧下,小貓很快恢復了健康,並且愈發的活潑可愛了。可是有一天,雷濤下課回到寢室,卻發現小貓不見了!經過一番尋找,才發現她正趴在陽台上對窗外的柿子樹發呆…在北京大學的校園裡,有許多柿子樹,在雷濤所在的宿舍樓前,就有n棵。並且這n棵柿子樹每棵的高度都是h。冬天的寒冷漸漸籠罩了大地,樹上的葉子漸漸掉光了,只剩下乙個個黃澄澄的柿子,看著非常喜人。而雷濤的小貓恰好非常的愛吃柿子,看著窗外樹上的柿子,她十分眼饞,於是決定利用自己敏捷的跳躍能力跳到樹上去吃柿子。小貓可以從宿舍的陽台上跳到窗外任意一棵柿子樹的樹頂。之後,她每次都可以在當前位置沿著當前所在的柿子樹向下跳1單位距離。當然,小貓的能力遠不止如此,她還可以在樹之間跳躍。每次她都可以從當前這棵樹跳到另外的任意一棵,在這個過程中,她的高度會下降delta單位距離。每個時刻,只要她所在的位置有柿子,她就可以吃掉。整個「吃柿子行動」一直到小貓落到地面上為止。雷濤調查了所有柿子樹上柿子的生長情況。飽很想知道,小貓從陽台出發,最多能吃到多少柿子?他知道寫乙個程式可以很容易的解決這個問題,但是他現在懶於寫任何**。於是,現在你的任務就是幫助雷濤寫乙個這樣的程式。左圖是n=3,h=10,delta=2的乙個例子。小貓按照圖示路線進行跳躍,可以吃到最多的8個柿子

思路:直接進行dp。dp[i][j]表示第i棵樹高度j的得到柿子的最大值。

dp[i][j] = max(dp[i][j + 1] , max)+ num[i][j]

時間複雜度o(n^3

),會超時

在更新解的時候存下每一高度的最大值,那麼max可以直接得到。

時間複雜度o(n^2),可以接受。

1 #include2

#define ios ios::sync_with_stdio(false);//

不可再使用scanf printf

3#define max(a, b) ((a) > (b) ? (a) : (b))//

禁用於函式,會超時

4#define min(a, b) ((a) < (b) ? (a) : (b))

5#define mem(a) memset(a, 0, sizeof(a))

6#define dis(x, y, x1, y1) ((x - x1) * (x - x1) + (y - y1) * (y - y1))

7#define mid(l, r) ((l) + ((r) - (l)) / 2)

8#define lson ((o)<<1)

9#define rson ((o)<<1|1)

10#define accepted 0

11#pragma comment(linker, "/stack:102400000,102400000")//

棧外掛程式12

using

namespace

std;

13 inline int

read()

1417

while (ch>='

0'&&ch<='9')

18return x*f;19}

2021 typedef long

long

ll;22

const

int maxn = 2000 + 10;23

const

int mod = 1000000007;//

const引用更快,巨集定義也更快

24const

int inf = 1e9 + 7;25

const

double eps = 1e-6;26

27int

dp[maxn][maxn];

28int num[maxn][maxn];//

柿子數量

29int max[maxn];//

每一高度的最大值

3031

intmain()

3244}45

for(int i = 1; i<= n; i++)dp[i][h] = num[i][h], max[h] =max(max[h], dp[i][h]);

46for(int i = h - 1; i >= 1; i--)

4754

}55 printf("

%d\n

", max[1

]);56

return

accepted;

57 }

bzoj1207 雷濤的小貓

有n 5000 棵柿子樹,每棵上面都有若干柿子且每棵樹高度均為h 5000 現在要從樹頂開始吃柿子,每次可以使自己的高度下降1,但是所在的樹沒變,或者換到任意一棵樹上,但是高度會降低delta,問到達地面 高度為0 時,最多能吃多少柿子 讀題之後,首先想到乙個最樸素的df 設f i j 表示當高度為...

openjudge 雷濤的小貓

總時間限制 20000ms 單個測試點時間限制 10000ms 記憶體限制 65536kb 描述 雷濤同學非常的有愛心,在他的宿舍裡,養著乙隻因為受傷被救助的小貓 當然,這樣的行為是違反學生宿舍管理條例的 在他的照顧下,小貓很快恢復了健康,並且愈發的活潑可愛了。可是有一天,雷濤下課回到寢室,卻發現小...

雷濤的小貓題解

雷濤同學非常的有愛心,在他的宿舍裡,養著乙隻因為受傷被救助的小貓 當然,這樣的行為是違反學生宿舍管理條例的 在他的照顧下,小貓很快恢復了健康,並且愈發的活潑可愛了。可是有一天,雷濤下課回到寢室,卻發現小貓不見了!經過一番尋找,才發現她正趴在陽台上對窗外的柿子樹發呆 在北京大學的校園裡,有許多柿子樹,...