小明很喜歡打遊戲,現在已知乙個新英雄即將推出,他同樣擁有四個技能,其中三個小技能的釋放時間和固定的傷害值為:
他還有乙個大招,其釋放的時間是乙個區間【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秒。無限次釋放,釋放之後照成的傷害是隨著時間增加的這道題難的地方就是那個大招蓄力,我的想法是把蓄力階段的每乙個時間點分隔出來放進w【i】,v[i]裡面,然後進行一次dp;但是過不了,也沒發現為啥。蓄力l秒釋放能夠造成temp的傷害
蓄力l+1秒釋放能夠造成temp+1*a的傷害
依次類推
看別人大神做的就先把單獨的技能和蓄力的兩個端點放入 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把的花費 輸出 輸...