1. 程式人生 > >百度之星2017資格賽1003 度度熊與邪惡大魔王

百度之星2017資格賽1003 度度熊與邪惡大魔王

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


18

思路為dp,程式碼賽後公佈。 
祝大家有好成績。

轉載,訪問量++,美滋滋。

#include <cmath>  
#include <cstdio>  
#include <cstdlib>  
#include <cstring>  
#include <iostream>  
#include <map>  
#include <algorithm>  
using namespace std;  

#define pi acos(-1)  
#define endl '\n'  
#define srand() srand(time(0)); #define me(x,y) memset(x,y,sizeof(x)); #define foreach(it,a) for(__typeof((a).begin()) it=(a).begin();it!=(a).end();it++) #define close() ios::sync_with_stdio(0); cin.tie(0); #define FOR(x,n,i) for(int i=x;i<=n;i++) #define FOr(x,n,i) for(int i=x;i<n;i++) #define W while #define sgn(x) ((x) < 0 ? -1 : (x) > 0) #define bug printf("***********\n"); typedef long long LL; const int INF=0x3f3f3f3f; const LL LINF=1e18+7; const int dx[]= {-1,0,1,0,1,-1,-1,1}; const int dy[]= {0,1,0,-1,-1,1,-1,1}; const int maxn=2005; const int maxx=1e5+100; const double EPS=1e-7; const int mod=998244353; template<class T>inline T min(T a,T b,T c) { return min(min(a,b),c); } template<class T>inline T max(T a,T b,T c) { return max(max(a,b),c); } template<class T>inline T min(T a,T b,T c,T d) { return min(min(a,b),min(c,d)); } template<class T>inline T max(T a,T b,T c,T d) { return max(max(a,b),max(c,d)); } inline LL Scan() { LL Res=0,ch,Flag=0; if((ch=getchar())=='-')Flag=1; else if(ch>='0' && ch<='9')Res=ch-'0'; while((ch=getchar())>='0'&&ch<='9')Res=Res*10+ch-'0'; return Flag ? -Res : Res; } LL dp[maxn][14];//dp[i][j]為花費 i為血 j為防 LL a[maxx],b[maxx],k[maxn],p[maxn]; int main() { //freopen( "in.txt" , "r" , stdin ); int n,m; while(~scanf("%d%d",&n,&m)) { for(int i=1;i<=n;i++) { a[i]=Scan();b[i]=Scan(); } for(int i=1;i<=m;i++) { k[i]=Scan();p[i]=Scan(); } for(int i=0;i<maxn;i++) for(int j=0;j<=10;j++) dp[i][j]=LINF; for(int i=0;i<=10;i++)//防禦 { dp[0][i]=0; for(int j=1;j<=m;j++) { LL t=p[j]-i;//破防的傷害 if(t<=0) continue; for(int p=t;p<=2003;p++) { dp[p][i]=min(dp[p-t][i]+k[j],dp[p][i]); } } for(int j=2002;j>=0;j--)//單調性 { dp[j][i]=min(dp[j][i],dp[j+1][i]); } } LL ans=0; for(int i=1;i<=n;i++) ans+=dp[a[i]][b[i]]; if(ans>=LINF) puts("-1"); else cout<<ans<<endl; } }

相關推薦

2017資格賽1003 度度邪惡魔王

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

2017 資格賽 1003 度度邪惡魔王

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

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

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

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 度度邪惡魔王(完全揹包)

度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有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

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

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

資格賽度度邪惡魔王 (dp)

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

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資格賽 1003度度邪惡魔王(DP)

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

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""程式設計大賽

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

度度邪惡魔王資格賽

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

HDU - 6082 度度邪惡魔王(背包變式)

擁有 防禦 ret mat 使用 std clas 多少 esp 度度熊與邪惡大魔王 度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。 度度熊一共擁有m種攻擊方式,第i種攻擊方式,需

度度邪惡魔王

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

度度邪惡魔王_DP

題目大意: n個魔王各自具有生命值(a),防禦力(b),有m種攻擊,分別需要k的晶石,能產生p的攻擊,求最少需要多少晶石。 思路: 防禦力範圍小迴圈防禦力#include <iostream&g

HDU 6082 度度邪惡魔王(完全揹包)

分析:n很大,但是怪物的防禦力只到10.列舉一下防禦力,然後對技能完全揹包 dp[i][j]:防禦力為j,生命力為i的最少晶石數 這個題主要是細節要注意感覺 #include <iostre

HDU 6082 度度邪惡魔王

度度熊與邪惡大魔王 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 543 Accep