首页 > 其他分享 >P8806 [蓝桥杯 2022 国 B] 搬砖

P8806 [蓝桥杯 2022 国 B] 搬砖

时间:2024-05-16 12:09:20浏览次数:24  
标签:ch 蓝桥 承重 P8806 2022 砖块 dp

P8806 [蓝桥杯 2022 国 B] 搬砖

一、问题简析

本题采用 贪心 + 01背包

令 \(a_i=\) 第 \(i\) 块砖; \(a_i.w=\) \(a_i\) 的质量; \(a_i.v=\) \(a_i\) 的价值。本题与 01背包 模板不同的地方是,本次选择的砖块会对后续的选择产生影响。为了使承重能力强的砖块留在最后选,贪心地优先选择承重能力弱的砖块。所以,要对砖块按 \(a_i.w+a_i.v\) (即承重能力)升序排序。

证明:若 \(a_i.w+a_i.v < a_j.w+a_j.v\),则 \(a_i\) 的承重能力弱于 \(a_j\)。
假设 \(a_i\) 和 \(a_j\) 无论上下都合法。

  • 若 \(a_i\) 在 \(a_j\) 上面,则 \(a_j\) 还能承重 \(a_j.v-a_i.w\)。
  • 若 \(a_i\) 在 \(a_j\) 下面,则 \(a_i\) 还能承重 \(a_i.v-a_j.w\)。
    由条件 \(a_i.w+a_i.v < a_j.w+a_j.v\),变换得 \(a_i.v-a_j.w<a_j.v-a_i.w\)。显然 \(a_j\) 的承重能力优于 \(a_i\),应优先选择承重能力弱的 \(a_i\)。

二、Code

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

ll quickin(void)
{
	ll ret = 0;
	bool flag = false;
	char ch = getchar();
	while (ch < '0' || ch > '9')
	{
		if (ch == '-')    flag = true;
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9' && ch != EOF)
	{
		ret = ret * 10 + ch - '0';
		ch = getchar();
	}
	if (flag)    ret = -ret;
	return ret;
}

struct node{int w, v;};
const int MAX = 2e4 + 10;
node A[1010];
int n, dp[MAX];

bool cmp(const node &a, const node &b)
{
	return a.w + a.v < b.w + b.v; 
}

int main()
{
	#ifdef LOCAL
	freopen("test.in", "r", stdin);
	#endif
	
	int sum = 0;
	n = quickin();
	for (int i = 1; i <= n; ++i)
	{
		A[i].w = quickin();
		A[i].v = quickin();
		
		sum += A[i].w;
	}
	
	sort(A + 1, A + 1 + n, cmp);
	
	for (int i = 1; i <= n; ++i)
	{
		for (int j = A[i].w + A[i].v; j >= A[i].w; --j)
		{
			dp[j] = max(dp[j], dp[j - A[i].w] + A[i].v);
		}
	}
	
	int ans = 0;
	for (int i = 0; i <= sum; ++i)
		ans = max(ans, dp[i]);
	
	cout << ans << endl;
	
	return 0;
}

标签:ch,蓝桥,承重,P8806,2022,砖块,dp
From: https://www.cnblogs.com/hoyd/p/18195706

相关文章

  • 各省高校在广东2023/2022/2021录取分数线下载
    为了帮助考生更好地进行志愿填报,更好的对数据筛选,故整理各省高校在广东2023/2022/2021三年录取分数excel文件,部分数据及文件见下图,数据根据历年录取分数线汇总,仅供参考,详细请登陆各高校网站查询。如有需要,可根据步骤下载文件:文件列表及数据如下图所示,数据实测真实有效。关......
  • 蓝桥杯-航班时间(简单写法+sscanf的应用)
    小h前往美国参加了蓝桥杯国际赛。小h的女朋友发现小h上午十点出发,上午十二点到达美国,于是感叹到“现在飞机飞得真快,两小时就能到美国了”。小h对超音速飞行感到十分恐惧。仔细观察后发现飞机的起降时间都是当地时间。由于北京和美国东部有12小时时差,故飞机总共需要......
  • Delphi DX10.2安装TeeChartPro2022找不到指定文件
    1、显示报错TeeChartProCompilationstarted:2024-05-1517:12:48Win32v25Enterprise(Delphi10.2andC++Builder10.2Update3)(C++)ERRORTee925Thisversionoftheproductdoesnotsupportcommandlinecompiling.TeeUI925Thisversionoftheproductdoe......
  • P8803 [蓝桥杯 2022 国 B] 费用报销
    P8803[蓝桥杯2022国B]费用报销一、问题简析本题是一道01背包。重点是\(K\)的限制,使我们在取\(a_i\)时,不能无所顾忌地套用模板\(dp_{i-1,j-a_i.worth}+a_i.worth\)。我们必须找到上一张合法的\(a_j\),即\(a_j\)与\(a_i\)之间的日期不小于\(K\)。通过以下步骤确......
  • 广东各高校2023/2022/2021近三年录取分数线(excel文件下载)
    为了帮助考生更好地进行志愿填报,更好的对数据筛选,故整理广东各高校2023/2022/2021三年录取分数excel文件,部分数据及文件见下图,数据根据历年录取分数线汇总,仅供参考,详细请登陆各高校网站查询。如有需要,可根据步骤下载文件:文件列表及数据如下图所示,真实有效。关注上述公众......
  • P9175 [COCI2022-2023#4] Mreža 题解
    P9175[COCI2022-2023#4]Mreža题解前言我发现,有整体二分与主席树的地方总有莫队(不是那个莫队,是那个莫队)。知识点(树上)倍增,(树上)莫队,树状数组(“树”含量满满),分块。题意分析给定一棵树,每条边有一个权值\(v\),以及可以用一个花费\(c\)将它变成更大的权值\(s\)。再给定一......
  • 程序员的AI编程小助手,CodeGeeX在vscode,vs2022,IDEA2023使用体验总结
    程序员的AI编程小助手,CodeGeeX使用体验总结一、1.CodeGeeX是什么?能做什么?CodeGeeX是一个智能编程软件工具,目前CodeGeeX支持多种主流IDE,如VSCode、visualstudio2022,IntelliJIDEA、PyCharm、Vim等,同时,支持Python、Java、C++/C、JavaScript、Go等多种语言。CodeGeeX如何......
  • linux里安装sql2022详细步骤
    https://learn.microsoft.com/zh-tw/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-linux-ver16&preserve-view=true&tabs=ubuntu2004https://learn.microsoft.com/zh-tw/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-linux-ver16&a......
  • 蓝桥杯-日期问题
    小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在......
  • 蓝桥杯-移动距离(最简单的写法)
    X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3…当排满一行时,从下一行相邻的楼往反方向排号。比如:当小区排号宽度为6时,开始情形如下:123456121110987131415.....我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移......