度度熊与邪恶大魔王 百度之星

度度熊需战胜n个怪兽,每个怪兽有生命值a[i]和防御力b[i]。度度熊有m种攻击方式,每种消耗k[i]晶石并造成p[i]伤害。若p[i]-b[j]>0则怪兽生命值减少相应数值。求最少晶石消耗以消灭所有怪兽。
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


还没做出来,等会

### 2006年百度大赛C语言题目解析 根据提供的引用内容[^3],可以得知2006年百度的题目涉及多组测试数据,每组测试数据包含两个整数N和M。其中N表示邪恶联盟中球的数量,而M表示球之间的运输航道数量。接下来的M行描述了球A和B之间存在C条运输航道。 在解决这类问题时,通常需要设计一个算法来处理输入数据并输出结果。以下是一个基于C语言的示例代码,用于解决类似的问题: ```c #include <stdio.h> #include <stdlib.h> #define MAX_N 500 typedef struct { int adj[MAX_N]; int weight[MAX_N]; int degree; } GraphNode; void addEdge(GraphNode graph[], int u, int v, int w) { if (graph[u].degree < MAX_N) { graph[u].adj[graph[u].degree] = v; graph[u].weight[graph[u].degree] = w; graph[u].degree++; } } int main() { int N, M; scanf("%d %d", &N, &M); GraphNode graph[N]; for (int i = 0; i < N; i++) { graph[i].degree = 0; } for (int i = 0; i < M; i++) { int A, B, C; scanf("%d %d %d", &A, &B, &C); addEdge(graph, A, B, C); addEdge(graph, B, A, C); // 如果是无向图 } // 处理逻辑(例如最短路径、最小生成树等) // 这里省略具体算法实现 return 0; } ``` 此代码片段展示了如何读取输入数据并构建一个简单的图结构。实际比赛中可能需要根据题目要求实现特定的算法,如Dijkstra算法或Kruskal算法等。 ### 注意事项 - 根据评分规则[^4],程序需在Linux环境下运行,并且每个测试用例的时间限制为10秒。 - 程序必须按照指定的输入输出格式进行操作,否则将无法得分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值