当前位置: 首页 > news >正文

蓝桥杯1447 砝码称重

问题描述

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

请你计算一共可以称出多少种不同的重量? 注意砝码可以放在天平两边。

输入格式

输入的第一行包含一个整数 N。

第二行包含 N 个整数:W1,W2,W3,⋅⋅⋅,WN​。

输出格式

输出一个整数代表答案。

样例输入

3
1 4 6

样例输出

10

样例说明

能称出的 10 种重量是:1、2、3、4、5、6、7、9、10、11。

1=1;

2=6−4(天平一边放 6,另一边放 4);​

3=4−1;

4=4;

5=6−1;

6=6;

7=1+6;

9=4+6−1;

10=4+6;

11=1+4+6。

评测用例规模与约定

对于 50的评测用例,1≤N≤15。

对于所有评测用例,1≤N≤100,N1≤N≤100,N​个砝码总重不超过 100000。

 

 

#include<iostream>
#include<cmath>
using namespace std;const int N = 110;
const int M = 2e5+10;  //j的范围是 [-m, m],M为最大可能重量的两倍
int n;
int m;  //总重量
int w[N];
bool f[N][M];  //f[i][j]:前i个砝码能否称出重量j
int ans;int main()
{cin>>n;for(int i=1; i<=n; ++i){cin>>w[i];m += w[i];}f[0][0]=1;  //初始化:0个砝码称出0//枚举前i个砝码for(int i=1; i<=n; ++i){//枚举所有可能的重量for(int j=0; j<=m; ++j){//不选当前砝码 || 选砝码放到左盘 || 选砝码放到右盘f[i][j]=f[i-1][j] || f[i-1][abs(j-w[i])] || f[i-1][j+w[i]];}}for(int i=1; i<=m; ++i){if(f[n][i]) ans++;}cout<<ans;return 0;
}

相关文章:

  • Python 实例传递的艺术:四大方法解析与最佳实践
  • 用 RefCounted + WeakPtr 构建线程安全的异步模块
  • 【OpenCV基础2】图像运算、水印、加密、摄像头
  • 如何在 Windows 11 或 10 上安装 FlutterFire CLI
  • CSS提高性能的方法有哪些
  • C++面试4-sizeof解析
  • RabbitMQ的简介
  • C 语言学习笔记(函数2)
  • AI在网络安全中的应用之钓鱼邮件检测
  • Python列表 vs 元组:全面对比解析(新手友好版)
  • MYSQL8.0常用窗口函数
  • input组件使用type=“number“的时候,光标自动跳到首位
  • 【Tools】VMware Workstation 17.6 Pro安装教程
  • 在 CentOS 7.9 上部署 node_exporter 并接入 Prometheus + Grafana 实现主机监控
  • PyMOL命令行和脚本
  • 精益数据分析(70/126):MVP迭代中的数据驱动决策与功能取舍
  • AI神经网络降噪 vs 传统单/双麦克风降噪的核心优势对比
  • 公网ip是固定的吗?动态ip如何做端口映射?内网ip怎么让外网远程访问?
  • 组态王通过开疆智能profinet转ModbusTCP网关连接西门子PLC配置案例
  • 学习BI---QuickBI介绍
  • 新华社原香港分社副社长、深圳市委原副书记秦文俊逝世
  • 广东进入“倒水模式”,珠江防总、珠江委已启动Ⅳ级应急响应
  • 石家庄桥西区通报“中药液”添加安眠药问题:对医院立案调查
  • 俄需要达成怎样的特别军事行动结果?普京:包含四个方面
  • 上海位居全球40城科技传播能力第六名
  • 经济日报:人工智能开启太空经济新格局