首页 > 试题广场 >

小红的双生英雄

[编程题]小红的双生英雄
  • 热度指数:2347 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}小红有 n 个英雄,第 i 个英雄的 cost 是 a_i,战斗力为 b_i。另外,存在一些“双生英雄”关系,如果同时上阵某一对英雄,则可以获得额外的战斗力收益。
\hspace{15pt}现在小红最多可以上阵四名英雄,且要求总 cost 不超过C。小红希望你求出组队的最大战斗力。

输入描述:
\hspace{15pt}第一行输入三个整数 n,C,m \left(1 \leqq n,C \leqq 10^3;\ 0 \leqq m \leqq n/2\right) 代表英雄数量、总cost限制、双生英雄的对儿数。 
\hspace{15pt}此后 n 行,第 i 行输入两个正整数 a_i,b_i \left(1 \leqq a_i,b_i \leqq 10^9\right) 代表第 i 个英雄的 cost 和战斗力。
\hspace{15pt}此后 m 行,第 i 行输入三个正整数 u_i,v_i,w_i \left(1 \leqq u_i,v_i \leqq n; u_i \neq v_i; 1 \leqq w_i \leqq 10^9\right) 代表第 u_i 和第 v_i 个英雄是双生英雄,同时上阵可以额外增加 w_i 战斗力。

\hspace{15pt}除此之外,保证每个英雄最多只存在一对双生英雄关系。对于 40\% 的用例,额外保证 m=0


输出描述:
\hspace{15pt}输出一个整数,代表组队的最大战斗力。
示例1

输入

4 10 1
3 9
4 10
6 15
8 20
1 2 15

输出

34

说明

\hspace{15pt}在这个样例中,小红可以选择上阵第一、二个英雄,获得 9+10+15=34 的战斗力。我们可以证明,这是符合要求的最大战斗力。
示例2

输入

4 1 1
3 9
4 10
6 15
8 20
1 2 15

输出

0
头像 番禺小韭菜
发表于 2025-03-05 19:02:29
#include <algorithm> #include <any> #include <iostream> using namespace std; int main() { int n, C, m; cin >> n >& 展开全文
头像 Goldminer
发表于 2025-04-23 17:54:54
#include <iostream> #include <vector> #include <algorithm> using namespace std; // 定义英雄结构体,存储每个英雄的 cost 和 power struct Hero { i 展开全文
头像 草海桐
发表于 2025-09-03 16:27:05
算法逻辑说明使用 动态规划:dp[i][k][j] 表示前 i 个英雄中选了 k 个,总 cost 为 j 时的最大战斗力。使用滚动数组优化空间(只保留两层)。每个英雄最多属于一个“双生对”,处理时避免重复。对于双生英雄 (u, v),只有当两者都被选时,才加上额外战斗力 w。遍历每个英雄,分情况更 展开全文
头像 why151
发表于 2025-04-08 16:14:24
package main import ( "fmt" ) func main() { var n,c,m int fmt.Scanf("%d %d %d",&n,&c,&m) cost := mak 展开全文
头像 草海桐
发表于 2025-10-11 15:07:58
package main import ( "bufio" "fmt" "os" "strconv" "strings" ) type Hero struct { cost, v, 展开全文
头像 浩鸣
发表于 2025-08-27 20:16:17
好几个代码应该是有问题的都是直接单人dp一遍  双人dp一遍  没有考虑到使用双生时 其中的英雄已经使用过的情况下面的样例 输出应该为 30  2 40 1 5 10 5 10 1 2 10 应当将双生的两个英雄作为一个整体考虑直接四种情况一起转移 #include<bits/stdc++.h 展开全文
头像 lizzyoo
发表于 2025-07-21 01:57:05
import sys input = sys.stdin.readline n, C, m = map(int, input().split()) heroes = [tuple(map(int, input().split())) for _ in range(n)] paired = set 展开全文
头像 Goldminer
发表于 2025-04-23 17:50:26
#include <iostream> #include <vector> #include <algorithm> using namespace std; struct Hero { int cost; long long power; }; 展开全文