蓝桥杯每日一题2023.9.19

蓝桥杯2021年第十二届省赛真题-砝码称重 - C语言网 (dotcpp.com)

题目描述

你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1, W2, · · · , WN。

请你计算一共可以称出多少种不同的重量?

注意砝码可以放在天平两边。

分析

可以使用DP将dpij表示只从前i个物品中选,且总重量为j的方案的集合,其属性是是否选用(bool)

一共有三种方案

方案一:不选第i个物品

方案二:将第i个物品加上(将第i个物品放在右边)

方案三:将第i个物品减去(将第i个物品减去)

注:为了防止减去第i个物品数组的标号为负数,需要加上一个值,使之始终为正数

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N = 110, M = 200010, b = M / 2;
int n, m, ans, w[N], dp[N][M];
int main()
{
	cin >> n;
	for(int i = 1; i <= n; i ++)
	{
		cin >> w[i];
		m += w[i];
	}
	dp[0][b] = 1;
	for(int i = 1; i <= n; i ++)
	{
		for(int j = -m; j <= m; j ++)
		{
			dp[i][j + b] = dp[i - 1][j + b];
			if(j - w[i] >= -m)dp[i][j + b] |= dp[i - 1][j - w[i] + b];
			if(j + w[i] <= m)dp[i][j + b] |= dp[i - 1][j + w[i] + b];	
		}
	}
	for(int i = 1; i <= m; i ++)
	{
		if(dp[n][i + b] == 1)ans ++;
	}
	cout << ans;
	return 0;
}
相关推荐
tyqtyq222 小时前
营养餐单规划:AI 科学饮食规划系统的鸿蒙实现
人工智能·学习·华为·职场和发展·生活·harmonyos
程序员杰哥5 小时前
接口测试知识总结
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试
CoderYanger8 小时前
视频切割脚本(Python版)
linux·开发语言·windows·后端·python·程序人生·职场和发展
CoderYanger8 小时前
视频裁剪+缩放+自动添加水印脚本(Python版)
开发语言·后端·python·程序人生·职场和发展·音视频·学习方法
杨逢昌工厂6S管理1 天前
28- 杨逢昌:制造企业仓储6S反复混乱解决方案——四维定置标准化管控体系,让物料混放、通道堵塞等重复性乱象减少90%
大数据·经验分享·笔记·职场和发展·制造·学习方法
想吃火锅10051 天前
【leetcode】56.合并区间js
算法·leetcode·职场和发展
凌波粒1 天前
LeetCode--47.全排列 II(回溯算法)
算法·leetcode·职场和发展
天真小巫1 天前
2026.7.10总结
职场和发展
程序员小远1 天前
性能测试之性能调优
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·性能测试
aqiu1111111 天前
【算法日记 19】LeetCode 1. 两数之和:梦开始的地方,哈希表的降维打击
算法·leetcode·职场和发展