1. 程式人生 > >hdu6082 2017"百度之星"資格賽1003 度度熊與邪惡大魔王(完全揹包dp)

hdu6082 2017"百度之星"資格賽1003 度度熊與邪惡大魔王(完全揹包dp)

度度熊與邪惡大魔王Accepts: 3135 Submissions: 19439
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Problem Description
度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。 度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。 當然,如果度度熊使用第i個技能打在第j個怪獸上面的話,會使得第j個怪獸的生命值減少p[i]-b[j],當然如果傷害小於防禦,那麼攻擊就不會奏效。 如果怪獸的生命值降為0或以下,那麼怪獸就會被消滅。 當然每個技能都可以使用無限次。 請問度度熊最少攜帶多少晶石,就可以消滅所有的怪獸。

Input
本題包含若干組測試資料。 第一行兩個整數n,m,表示有n個怪獸,m種技能。 接下來n行,每行兩個整數,a[i],b[i],分別表示怪獸的生命值和防禦力。 再接下來m行,每行兩個整數k[i]和p[i],分別表示技能的消耗晶石數目和技能的傷害值。 資料範圍: 1<=n<=100000 1<=m<=1000 1<=a[i]<=1000 0<=b[i]<=10 0<=k[i]<=100000 0<=p[i]<=1000

Output
對於每組測試資料,輸出最小的晶石消耗數量,如果不能擊敗所有的怪獸,輸出-1

Sample Input
1 2
3 5
7 10
6 8
1 2
3 5
10 7
8 6
Sample Output
6
18

這題好像比1004還要簡單啊。。就是個完全揹包。。dp[i][j]表示打死一個護甲值為i,生命值還剩j的boss所需的最小晶石數。這樣用完全揹包處理是O(m2b)的。然後遍歷所有的boss,加上打死他所需的最小晶石即可。是O(n)的,可以過。

#include <cstdio>
#include <cstring>
#define ll long long
#define N 100010
#define M 1010
#define inf 0x3f3f3f3f
int a[N],b[N],c[M],w[M],n,m,dp[11][M],mxa=0,mxb=0;
inline int
min(int x,int y){return x<y?x:y;} inline int max(int x,int y){return x>y?x:y;} inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f; } int main(){ // freopen("a.in","r",stdin); while(~scanf("%d%d",&n,&m)){ bool flag=0; for(int i=1;i<=n;++i) a[i]=read(),b[i]=read(),mxa=max(a[i],mxa),mxb=max(mxb,b[i]); for(int i=1;i<=m;++i) c[i]=read(),w[i]=read(); memset(dp,0x3f,sizeof(dp)); for(int i=0;i<=mxb;++i) dp[i][0]=0; for(int i=0;i<=mxb;++i) for(int k=1;k<=m;++k){ if(w[k]<=i) continue;//打不穿護甲,沒啥用 for(int j=1;j<=mxa;++j){ if(j-w[k]+i>=0) dp[i][j]=min(dp[i][j],dp[i][j-w[k]+i]+c[k]); else dp[i][j]=min(dp[i][j],dp[i][0]+c[k]); } } ll ans=0; for(int i=1;i<=n;++i){ if(dp[b[i]][a[i]]==inf){flag=1;break;} ans+=dp[b[i]][a[i]]; } if(flag) puts("-1"); else printf("%lld\n",ans); } return 0; }

相關推薦

hdu6082 2017""資格賽1003 度度邪惡魔王(完全揹包dp)

度度熊與邪惡大魔王Accepts: 3135 Submissions: 19439 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Prob

2017資格賽 1003 度度邪惡魔王 背包DP

log accep 防禦 ssi str 完全背包 time 怪物 amp 度度熊與邪惡大魔王 Accepts: 3027 Submissions: 18837 Time Limit: 2000/1000 MS (Java/Others) Memor

2017資格賽 1003 度度邪惡魔王完全揹包

度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。 度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。 當然,如果度度熊使用第i個技能打在第j個怪獸上面的話,會使得第j個怪獸的生命值減少p

2017 資格賽1003度度邪惡魔王

1003度度熊與邪惡大魔王 Accepts: 1503 Submissions: 9026 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

2017資格賽1003度度邪惡魔王

度度熊與邪惡大魔王 題目傳送門 Accepts: 3608 Submissions: 22145 Time Limit: 2000/1000 MS (Java/Others

資格賽度度邪惡魔王dp

度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。 度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。 當然,如果度度熊使用第i個技能打

2017資格賽1003 度度邪惡魔王

Problem Description 度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。 度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。

2017 資格賽 1003 度度邪惡魔王

完全揹包 這題要考慮到怪獸的數目100000很多,但是生命值1000和防禦力10很小,並且招數種類1000也不大,(根據抽屜原理)說明有很多生命值或者防禦力重複的怪獸。因此我們沒有必要一個怪獸一個是怪獸大,只要對每種生命值和防禦力的怪獸進行每種招數的轉移即可。 dp[i][

hdu6083 2017""資格賽1004 度度的午飯時光(揹包dp+記錄路徑)

01揹包+記錄路徑。還要保證最大得分相等時輸出序號和最小的,序號和也相等時輸出字典序最小的。path[i][j]表示用第i件物品,可以恰好達到j花費。回溯時,i從大到小遇到的第一個能達到j的一定是最優的那一個。 #include <cstdio>

2017資格賽 1003度度邪惡魔王DP

solution nav normal ner 就會 預處理 display badge rate 度度熊與邪惡大魔王 Accepts: 3021 Submissions: 18787 Time Limit: 2000/1000 MS (Java/Ot

2017-1003-度度邪惡魔王完全揹包

度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。 度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。 當然,如果度度熊使用第i個技能打在第j個怪獸上面的話,會使得第j個怪獸的生命值減少p

2017初賽A 度度的01世界

content scanf output bar imp boa 世界 clock other 度度熊的01世界 Accepts: 967 Submissions: 3064 Time Limit: 2000/1000 MS (Java/Ot

1003 度度邪惡魔王 DP

度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。當然,如果度度熊使用第i個技能打在第j個怪獸上面的話,會使得第j個怪獸的生命值減少p[i]-

1003度度邪惡魔王完全揹包

1003度度熊與邪惡大魔王 Accepts: 1503 Submissions: 9026 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Descrip

度度的午飯時光 2017資格賽 -.-

set others spa 字典序 info iostream 最小 long long 預算 度度熊的午飯時光 Accepts: 755 Submissions: 8737 Time Limit: 2000/1000 MS (Java/Others)

hdu 6082 度度邪惡魔王(2017""程序設計大賽 - 資格賽 )

lib div problem ron -a def size 進行 無限 度度熊與邪惡大魔王 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total

2017 資格賽 題解

真心 數據 targe 比較 blog png 防禦 href 普通 百度之星 2017 資格賽 題解(原創)(2~5題 第一題方法是錯的 第二題數據太水 並不會正解) 轉載請註明出處http://www.cnblogs.com/nflslzt/p/7302377.html

2017資格賽題解

度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。 度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。 當然,如果度度熊使用第i個技能打在第j個怪獸上面的話,會使得第j個怪獸的生命值減少p

2017資格賽(A)1005 今夕何夕(日期計算)

題目中文,不再詳述題意 思路:簡單的日期計算,基礎題。自己這個寫法分類討論多一些,細節多,偏於繁瑣,容易出錯,聽人討論說,有比較簡潔的演算法,感興趣的小夥伴可以上網搜一搜。 // 今夕何夕.cpp 執行/限制:15ms/1000ms #include <cstdio

2017資格賽總結

第一題沒有什麼說的,題目我都沒看懂,並沒有理解他的包圍,賽後大佬的程式碼我也看了,嗯,沒看懂。。。 第二題是資料水了,正解為全域性最小割,我並沒這樣做出來,我只是單純的用並查集刪了點(可用單鏈卡掉),竟然過了。。(據說資料水到不用並查集也可以過) 度度熊的王國戰略 A