首页 > 其他分享 >P8742 [蓝桥杯 2021 省 AB] 砝码称重 题解

P8742 [蓝桥杯 2021 省 AB] 砝码称重 题解

时间:2022-12-02 21:22:05浏览次数:72  
标签:AB int 题解 蓝桥 ch 砝码 dp 称重

题目分析

原题链接 P8742 [蓝桥杯 2021 省 AB] 砝码称重

由这道题,我们不难联想到 P2347 砝码称重,两题的做法是相似的。因此这道题做法就是背包。

其本质上都是选取砝码,求能表示的重量的个数。

而这道题特别的地方在于多了个天平,因此左右两盘就意味着砝码可以“相减”,状态转移的时候需要注意。

由于本体是可行性问题,因此我们设 \(dp_{i,j}\) 为选取前 i 个砝码是否可以称量出 j 的重量。\(dp_{i,j} =1\) 表示能,\(dp_{i,j} =0\) 表示不能。

接下来考虑转移:

若 \(dp_{i-1,j}=1\),那么:

  • \(dp_{i,j}\) 是可行的,因为可以不选第 i 个砝码;

  • \(dp_{i,j+a_i}\) 也是可行的,显然;

当涉及到 \(dp_{i,j-a_i}\) 的转移时, \(j-a_i\) 有可能为负值,但并不影响转移。因为天平左右盘可以互换,所以本质上等价于 \(a_i-j\) 。

例如:样例中状态至 \(dp_{3,2}\) 时,可以由状态 \(dp_{2,4}\) 转移而来,即左盘放重量为 4 的砝码,右盘放重量为 6 的砝码。

  • \(dp_{i,|j-a_i|}\) 也是可行的

AC Code

#include<stdio.h>
using namespace std;
const int N=105,M=1e5+5;
int ans,n,dp[N][M];
inline int read(){
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
int abs(int x){return x>0?x:-x;}
int main(){
	n=read();
	dp[0][0]=1;
	for(int i=1;i<=n;i++){
		int a=read();
		for(int j=0;j<=100000;j++){
			dp[i][j]|=dp[i-1][j];
			dp[i][j+a]|=dp[i-1][j];
			dp[i][abs(j-a)]|=dp[i-1][j]; 
		}
	}
	for(int i=1;i<=100000;i++) if(dp[n][i]) ans++;
	printf("%d",ans);
	return 0;
}

标签:AB,int,题解,蓝桥,ch,砝码,dp,称重
From: https://www.cnblogs.com/qwerasdasd1/p/16945649.html

相关文章

  • LG-P4264 [USACO18FEB]Teleportation S 题解
    LG-P4264[USACO18FEB]TeleportationSSolution目录LG-P4264[USACO18FEB]TeleportationSSolution更好的阅读体验戳此进入题面SolutionCodeUPD更好的阅读体验戳此进入......
  • 蓝桥杯 ALGO-50算法训练 数组查找及替换
    问题描述给定某整数数组和某一整数b。要求删除数组中可以被b整除的所有元素,同时将该数组各元素按从小到大排序。如果数组元素数值在A到Z的ASCII之间,替换为对应字母。......
  • 蓝桥杯算法学习整理
    报名了蓝桥杯,但是对于算法的基础却不是很好,收集了一些学习的链接,以下链接都是转载自别人名下的博客文章,如果博主介意的话,请通知我立即删除。供日后复习时使用:前部分是摘......
  • 蓝桥杯 ALGO-47算法训练 蜜蜂飞舞
    时间限制:1.0s内存限制:512.0MB问题描述“两只小蜜蜂呀,飞在花丛中呀……”话说这天天上飞舞着两只蜜蜂,它们在跳一种奇怪的舞蹈。用一个空间直角坐标系来描述这个......
  • 蓝桥杯 ALGO-54算法训练 简单加法(基本型)
    时间限制:1.0s内存限制:512.0MB问题描述首先给出简单加法算式的定义:如果有一个算式(i)+(i+1)+(i+2),(i>=0),在计算的过程中,没有任何一个数位出现了进位,则称其为......
  • 蓝桥杯 ALGO-57算法训练 删除多余括号
    时间限制:1.0s内存限制:512.0MB问题描述从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算符的相对位置不变,且与......
  • LG-P4184 [USACO18JAN]Sprinklers P 题解
    LG-P4184[USACO18JAN]SprinklersPSolution目录LG-P4184[USACO18JAN]SprinklersPSolution更好的阅读体验戳此进入题面SolutionCodeUPD更好的阅读体验戳此进入题面......
  • LG-P4182 [USACO18JAN]Lifeguards P 题解
    LG-P4182[USACO18JAN]LifeguardsPSolution目录LG-P4182[USACO18JAN]LifeguardsPSolution更好的阅读体验戳此进入题面SolutionCodeUPD更好的阅读体验戳此进入解法......
  • ABC247E Max Min 题解
    ABC247EMaxMinSolution目录ABC247EMaxMinSolution更好的阅读体验戳此进入题面SolutionCodeUPD更好的阅读体验戳此进入题面给定数列$A_n$,给定$X,Y$,我们定......
  • ABC247F Cards 题解
    ABC247FCardsSolution目录ABC247FCardsSolution更好的阅读体验戳此进入题面SolutionCodeUPD更好的阅读体验戳此进入题面给定$n$张卡片,每张卡片正反面各有一个......