牛客 小明打聯盟 揹包dp

2021-09-11 02:46:05 字數 1360 閱讀 3547

小明很喜歡打遊戲,現在已知乙個新英雄即將推出,他同樣擁有四個技能,其中三個小技能的釋放時間和固定的傷害值為:

他還有乙個大招,其釋放的時間是乙個區間【l,r】,可以在區間內任意時間點釋放出技能,其如果在l+i時刻釋放技能,其能夠打出的傷害值為:temp+a*i

這裡temp值表示技能的基礎傷害(同時也就是在時刻l釋放技能的傷害值),a是乙個常數。

小明很喜歡研究連招使得在有限的時間內打出最高的傷害,現在他想要在t長度單位時間內打出最高的傷害,問這個最大傷害值。

本題包含多組資料。

輸入格式為:

tx a

y bz c

l r temp a

資料範圍:

1<=t<=1e5

1<=x,y,z,l,r<=t

l<=r

<=a,b,c,temp,a<=1e5

輸出包含一行,輸出能夠打出的最高傷害值。
示例1

複製

8

3 12 3

1 33 3 3 3

複製

24
大招:蓄力時間最短l秒,最多r秒。無限次釋放,釋放之後照成的傷害是隨著時間增加的

蓄力l秒釋放能夠造成temp的傷害

蓄力l+1秒釋放能夠造成temp+1*a的傷害

依次類推

這道題難的地方就是那個大招蓄力,我的想法是把蓄力階段的每乙個時間點分隔出來放進w【i】,v[i]裡面,然後進行一次dp;但是過不了,也沒發現為啥。

看別人大神做的就先把單獨的技能和蓄力的兩個端點放入 w,v裡面,進行dp;然後再單獨把蓄力的整個過程dp一遍,有點東西。

最後注意longlong。

**

#include"stdio.h"

#include"algorithm"

#include"string.h"

#include"iostream"

using namespace std;

const int n=1e5+10;

long long v[10],w[10];

long long dp[n];

int main()

int l,r,t,a;

scanf("%d %d %d %d",&l,&r,&t,&a);

v[3]=l;

w[3]=t;

v[4]=r;

w[4]=(r-l)*a+t;

for(int i = 0;i < 5;i ++)

cout<}

} for(int i = l;i <= r;i ++)

printf("%lld\n",dp[w]); }

return 0;

}

揹包dp 小明打聯盟

這個題是乙個完全揹包問題,對於大招,我們有三種選擇 l,l i,r l,l i,r l,l i,r,最終的方案中l i l i l i最多出現一次,於是先用前三個 物品 l r 前三個物品 l r 前三個物品 l r這五個物品跑完全揹包,然後用l i l i l i更新一遍dp v dp v dp ...

小明打聯盟 斜率 單調佇列 優化dp 揹包

題目描述 小明很喜歡打遊戲,現在已知乙個新英雄即將推出,他同樣擁有四個技能,其中三個小技能的釋放時間和固定的傷害值為 他還有乙個大招,其釋放的時間是乙個區間 l,r 可以在區間內任意時間點釋放出技能,其如果在l i時刻釋放技能,其能夠打出的傷害值為 temp a i 這裡temp值表示技能的基礎傷害...

牛客多組揹包

牛客多組揹包 能天使的願望 題意 有n個店鋪,每個店鋪中有m把銃,然後給出n個店鋪賣1 m把銃需要花費的錢,現在我們需要賣k把銃,因為需要運送的關係,當買的銃少於y把時,需要支付郵費 輸入 第一行輸入 n m k y 第二行輸入 n個商店的郵費 接下來n行輸入 每個商店的賣銃1 m把的花費 輸出 輸...