突然决定要参加蓝桥,已经超级久没复习C/C++的我考前还是决定打几道题捡一捡C/C++的语法和思路。

2023年蓝桥的题之后会出,因为 AcWing上还没有出可以测试的程序,也没把握说自己考场上做的就是对的。

题目

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

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

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

输入格式

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

第二行包含 N 个整数: W 1 W_1 W1​, W 2 W_2 W2​,⋅⋅⋅, W N W_N WN​。

输出格式

输出一个整数代表答案。

数据范围

对于 50% 的评测用例,1≤N≤15。
对于所有评测用例,1≤N≤100,N 个砝码总重不超过 1 0 5 10^5 105。

输入样例

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。

想法

想法很朴素。这么多东西,一下子放进来算,肯定算不明白,那只能一个一个来。

一个一个来,那怎么表示第 i 个进来之前的之前的结果?

噢吼~

这不是动态规划的思想嘛。

那就设计下动态规划的表示。目测这个dp[][]应该具有三要素:

  1. 到第几个了
  2. 到这里的方案数
  3. 到这里之前有的方案是哪些

瞄一眼总重不超过 1 0 5 10^5 105,大胆设 dp[i][j] 表示加入第 i 个砝码时,重量 j 是不是被用了。(emmmm?好像又不是动态规划了……)

状态转移方程:dp[i][j]=max(max(dp[i-1][j], dp[i-1][j-a[i]]), dp[i-1][j+a[i]])
其中 a[i] 表示第 i 个砝码的重量

结果:sum(dp[n]) 对最后一个砝码放入后的结果求和。

注意点

  1. 重量可能为负数(例如 9 可能是这么算出来的:(3-4)+10),所以要加 offset 表示负数。
  2. 空间问题,加加减减的可能导致数组越界了,记得加个判断。
  3. 空间问题,怕数组开大了,采用滚动dp,不储存之前的结果。

代码

#include<bits/stdc++.h>
using namespace std;
int N;
// 负数
const int offset = 100052;
// 总数
const int maxn = offset+100052;
// 砝码
int a[1005];
// 滚动dp
int dp[2][maxn];// sort 用的(实际上没什么用,复习一下罢了)
bool cmp(int a,int b){return a>=b;
}int main(){cin>>N;// 初始化为0memset(dp,0,sizeof(dp));int n = 1;while(cin>>a[n]){n++;}// 排序(没什么用其实,可以不要)sort(a+1,a+n,cmp);// 对 0 置 1dp[0][offset]=1;for(int i=1;i<n;i++){for(int j=0;j<maxn;j++){// 判断一下,怕 段错误if(j+a[i]<maxn && j-a[i]>0)dp[1][j] = max(max(dp[1-1][j], dp[1-1][j-a[i]]),dp[1-1][j+a[i]]);}// dp滚动一下for(int j=0;j<maxn;j++){dp[0][j] = dp[1][j];}
//      可以输出看看
//      for(int j=offset+1;j<maxn;j++)
//          if (dp[0][j]>0)
//              cout<<j-offset<<"\n";
//      cout<<"\n\n";}// 统计结果int count = 0;for(int i=offset+1;i<maxn;i++){if(dp[0][i]>0){count++;
//          cout<<dp[n-1][i]<<"\n";}}cout<<count;return 0;
}

AC(可能是因为题目条件比较松……)

砝码称重(第十二届蓝桥杯省赛第一场C++A/B/研究生组)相关推荐

  1. 砝码称重 第十二届蓝桥杯B组

    你有一架天平和 NN 个砝码,这 NN 个砝码重量依次是 W1,W2,⋅⋅⋅,WNW1,W2,···,WN. 请你计算一共可以称出多少种不同的正整数重量? 注意砝码可以放在天平两边. 输入格式 输入的 ...

  2. 第十二届蓝桥杯省赛第二场C++B组真题 【未完结】

    目录 3496. 特殊年份 [简单] 3490. 小平方 [简单] 3491. 完全平方数[简单数论] 3492. 负载均衡[小根堆模拟] 3496. 特殊年份 [简单] #include<bi ...

  3. 2021年第十二届蓝桥杯省赛第二场Python组(真题+解析+代码):双阶乘

    1 真题 2 解析 难度系数:⭐ 考察题型:数论 涉及知识点: 双阶乘 思路分析: 啊这,竟然遇到了小学数学题:找规律.老铁,拿捏了! 规律:后一项都比前一项少个2,2021!!=2021*2019* ...

  4. 第十二届蓝桥杯省赛详解

    试题A:空间 1B是8位,32位二进制数占用4B空间,1MB=2^10KB=2^20B 那么可以存放32位二进制数的个数为256*2^20*8/32=67108864 试题B:卡片 分析:因为数据只有 ...

  5. 2021年第十二届蓝桥杯省赛C/C++B组题解总结

    前几天(2021.4.18)刚刚比完了2021年第十二届蓝桥杯省赛,本人参加的是软件组C++B组的比赛,本文包括了这一届C++B组的题目以及部分题解.感悟和总结. 目录 试题A.空间 试题B.卡片 试 ...

  6. 第十二届蓝桥杯省赛 Java 大学 B 组—砝码称重—满分百分题解

    第十二届蓝桥杯省赛 Java 大学 B 组-砝码称重-满分百分题解 一.解题思路 1.解法一( Java ) 解法思路:简单模拟 ☝ArrayList 遍历 + HashSet 存储(去重) 伪代码如 ...

  7. 2021第十二届蓝桥杯省赛JAVA B组 题目+答案(复现赛)

    2021第十二届蓝桥杯省赛JAVA B组 题目+答案(复现赛) A:ASC B:卡片 C:直线 D:货物摆放 E:路径 Floyed Dijkstra F:时间显示 G:最少砝码 H:杨辉三角形 I: ...

  8. 2021年第十二届蓝桥杯省赛B组(C/C++)第二场题解

    文章目录 2021年第十二届蓝桥杯省赛B组(C/C++)第二场题解 1.求余 2.双阶乘 3.格点 4.整数分解 5.城邦 6.特殊年份 7.小平方 8.完全平方数 9.负载均衡 10.国际象棋 20 ...

  9. 十二届蓝桥杯省赛B组C++解析(填空题部分)

    十二届蓝桥杯省赛B组C++解析(填空题部分) 目录 十二届蓝桥杯省赛B组C++解析(填空题部分) A:空间 B:卡片 C:直线 D:货物摆放 E:路径 A:空间 该题是一道计算机基础原理题,这里需要了 ...

最新文章

  1. shellinabox的安装使用
  2. 二维数组的对角搜索C++
  3. 郁金香汇编代码注入怎么写看雪_雷军1994年写的诗一样的代码,我把它运行起来了!...
  4. 牛客网未通过代码---
  5. 挖掘经典:几乎被人遗忘的HTML七种用法 (转)
  6. jmeter通过ant执行时报错 jmeter.log not found
  7. matplotlib(一):散点图
  8. COM编程之四 引用计数
  9. html怎么做成响应式的,怎么用html5完成响应式布局?
  10. EXCEL 学习步骤总结
  11. x299服务器芯片,X299比X399差在哪? 两大平台产品比拼
  12. 使用WINPE制作U盘启动
  13. MTK 11A MAINMENU
  14. 安全组-出入战规则设置
  15. 那些好玩的生成器网站
  16. Oracle (temporary tablespace)临时表空间说明
  17. 阿里M8级铁子整理出SQL手册:收获不止SQL优化,抓住SQL的本质
  18. 使用Dev C++运行c语言代码时碰到Failed to executeC:\c++.cpp: Error 0 :操作成功完成
  19. 微信装修装饰小程序源码开发方案
  20. [681]小米手机安装charles证书,提示“没有可安装的证书”

热门文章

  1. 郭光灿--奇妙的量子世界笔记2(量子力学的解释)
  2. Unreal Open Day游记
  3. 裁员滚滚,这个冬天有点冷 | 程序员有话说
  4. 九阴白骨爪(2)Ubuntu20.04下配置环境(MySQL/Anaconda/Django)
  5. Linux九阴真经之九阴白骨爪残卷1(加密和安全)
  6. 大家好,希望与君共勉
  7. 华硕服务器 系统安装win7系统,华硕主板u盘装win7系统 华硕主板装u盘系统安装win7...
  8. STM32F103移植LiteOS保姆级教程(基于Ubuntu平台)
  9. 系统试运行报告是谁写的_费控系统项目实施情况说明
  10. 浮点数(实数)中单精度与双精度区别