首页 > 其他分享 >分组背包+四位

分组背包+四位

时间:2025-01-10 21:58:25浏览次数:1  
标签:cnt 背包 int v1 second 分组 -- 四位 first

https://ac.nowcoder.com/acm/contest/99784/E

#include<bits/stdc++.h>
#define lc p<<1
#define rc p<<1|1
#define INF 2e9
using namespace std;

#define endl '\n'
using ll = long long;
using pii = pair<ll, ll>;
const double PI = acos(-1);
const int N = 1e3+ 10;
const int mod = 1e9 + 7;
int n,C,m;
bool st[N];
vector<array<ll,3>> v1[N];
vector<pii> a;
ll f[N][5];
void solve() {
	cin>>n>>C>>m;
	a.resize(n+1);
	for(int i=1;i<=n;i++){
		cin>>a[i].first>>a[i].second;
	}
	int cnt=1;
	for(int i=1;i<=m;i++){
		ll x,y,w;cin>>x>>y>>w;
		v1[cnt].push_back({a[x].first,a[x].second,1});
		v1[cnt].push_back({a[y].first,a[y].second,1});
		v1[cnt].push_back({a[x].first+a[y].first,a[x].second+a[y].second+w,2});
		cnt++;
		st[x]=st[y]=1;
	}
	for(int i=1;i<=n;i++){
		if(!st[i]){
			v1[cnt++].push_back({a[i].first,a[i].second,1});
		}
	}
	ll ans=0;
	for(int i=1;i<cnt;i++){
		for(int j=C;j>=0;j--){
			for(int k=4;k>=1;k--){
				for(int p=v1[i].size()-1;p>=0;p--){
					if(k-v1[i][p][2]>=0&&j-v1[i][p][0]>=0)
					f[j][k]=max(f[j][k],f[j-v1[i][p][0]][k-v1[i][p][2]]+v1[i][p][1]);
					ans=max(ans,f[j][k]);
				}
			}
		}
	}
	cout<<ans;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr), cout.tie(nullptr);
	
	int T = 1;
//	cin>>T;
	while (T--) {
		solve();
	}
	
	return 0;
}



标签:cnt,背包,int,v1,second,分组,--,四位,first
From: https://www.cnblogs.com/laileou/p/18664759

相关文章

  • 科研绘图系列:R语言绘制Y轴截断分组柱状图(y-axis break bar plot)
    禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者!文章目录介绍特点意义加载R包数据下载导入数据数据预处理画图输出总结系统信息介绍Y轴截断分组柱状图是一种特殊的柱状图,其特点是Y轴的刻度被截断,即在某个范围内省略了......
  • 代码随想录训练营第三十七天| 完全背包 518. 零钱兑换 II 377. 组合总和 Ⅳ 70. 爬楼
    完全背包理论直接的说明就是把01背包的有限次选取变为无限次选取求最大价值相对的遍历方向也可以相互调换因为dp[j]只需要上次的计算结果就行 publicclassCarlcodeAllBag{publicstaticvoidtestCompletePack(){//先遍历物品再遍历背包int[]......
  • 数字分组求偶数和
    问题描述小M面对一组从1到9的数字,这些数字被分成多个小组,并从每个小组中选择一个数字组成一个新的数。目标是使得这个新数的各位数字之和为偶数。任务是计算出有多少种不同的分组和选择方法可以达到这一目标。numbers:一个由多个整数字符串组成的列表,每个字符串可以视为......
  • 01背包问题 Golang实现
    背包问题的分类:01背包描述:有n件物品和一个最多能背重量为w的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。思路分析:问题核心:从给定的......
  • 国标GB28181视频平台EasyCVR创建分组后,页面展开速度非常慢的解决方法
    在现代视频监控系统中,随着摄像头数量的增加和监控需求的复杂化,平台的性能和稳定性面临着越来越高的要求。EasyCVR作为一款广泛应用于大中型项目的视频监控管理平台,其高效的数据处理能力和强大的功能支持是其核心优势之一。然而,在实际应用中,用户可能会遇到一些性能瓶颈,例如在创建......
  • 遗留了很久的功能终于搞定/QTreeWidget自定义节点/添加删除修改分组
    一、前言说明这个功能看起来简单,实际上也确实简单,以前没搞的时候还以为很难,难点就是如何存储这个任意层级的树状列表信息,近期大环境经济很差,刚好有空把这个功能搞定,其实二维表格的方式存储这种任意层级树结构就可以,就是子节点需要指定父节点,父节点为空表示顶层节点,最开始还考虑搞......
  • 25年开篇之作---动态规划系列<七> 01背包问题
    目录一:背包问题的简介二:01背包问题1.模板题2.LeetCode经典例题一:背包问题的简介背包问题(Knapsackproblem)是⼀种组合优化的NP完全问题。问题可以描述为:给定⼀组物品,每种物品都有⾃⼰的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最⾼。......
  • 动态规划<八> 完全背包问题及其余背包问题
    目录例题引入---找到解决问题模版LeetCode经典OJ题1.第一题 2.第二题 3.第三题 其余的一些背包问题1.二维费用的背包问题1.第一题2.第二题2.其余杂题例题引入---找到解决问题模版OJ传送门牛客DP42【模板】完全背包画图分析: 使用动态规划解决(第二问与......
  • 两个int值,分别对应一个16进制字节高四位和低四位时的转换方法。
    例如:inta=1;intb=2;想要把他们转换成一个16进制QByteArray0x12分别对应高四位和低四位。使用以下方法:inta=1;intb=2;QByteArrayarray=QByteArray(1,(char)((a&0xFF)<<4|(b&0xFF)));原理:a=1&0xFF转换成二进制就是00000001&11111111,每一......
  • 请使用js实现一个分组抽签的算法
    要实现一个分组抽签的算法,我们首先需要明确一些要求和步骤。以下是一个简单的实现,它允许你将一组人员随机分配到指定数量的组中:输入:参与抽签的人员列表。需要的组数。输出:每个组的人员列表。以下是一个简单的JavaScript实现:functionshuffleArray(array){for......