好久没写了emmm。

也不找借口,去年写着写着就烂了,然后转眼就是一年,蓝桥杯就在眼前了,于是重新捡了起来。

会尽量更新自己写的题目,有不对的地方烦请各位不吝指教,蟹蟹啦。

那么首先看这道题

肯定不能暴力解答,100个总重不超过100000的砝码绝对会超时。

这道题我一开始的思路就是dp,但是有感觉无从下手,找不到前后关系,于是借鉴了一下其他大佬的思路,其中@小红花大佬的思路对我来说最通俗易懂且有启发了,这是我当时看的博客,下面用我自己的想法整理了一下。

首先对于第一个砝码,能称出的重量是它本身的重量。

然后对于第二个砝码,能称出的重量是在第一个砝码能称出的重量的基础上加减第二个砝码重量,以及第二个砝码的重量。

对于第三个砝码,跟第二个砝码一样,能称出的重量是在第二个砝码能称出的重量(已经包含了第一个砝码能称出的重量)的基础上加减第三个砝码重量,以及第三个砝码的重量。

以此类推。具体的例子@小红花大佬已经有举出,就不再赘述了。

下面是我写的代码

#include<stdio.h>int finding(int a){           //取绝对值的函数return a>0?a:(-a);
}int main(void){int n;scanf("%d", &n);int i, j;int W[n];int dp[n][100010];            //对于dp[i][j],i表示前i+1个砝码,j表示可以称出的重量, //dp[i][j]值为1即为前i+1个砝码可以称出质量jint total = 0;                //算出总质量来约束jfor(i = 0 ; i < n ; i++){scanf("%d", &W[i]);total += W[i];}for(i = 0 ; i < n ; i++){if(i == 0){                     //如果是第一个砝码那么只可以称出此砝码的重量dp[i][W[i]] = 1;}else{for(j = 0 ; j < total ; j++){//如果i-1个砝码可以称出j质量,那么加上一 //个砝码可以称出的质量就是在j质量的基础 //上加减新砝码的质量以及新砝码质量本身以 //及j质量本身if(dp[i-1][j] == 1){               dp[i][j] = dp[i-1][j];dp[i][j+W[i]] = 1;dp[i][finding(j-W[i])] = 1;}if(j == W[i]){dp[i][j] = 1;}}}}int num = 0;for(j = 1 ; j <= total ; j++){                 //进行计数,每个可以称出的质量只需计一次if(dp[n-1][j] == 1){num++;i = -1;    }}printf("%d", num);return 0
}

有部分问题可以看注释,动态规划题目这样定义dp数组基本是普遍的现象了,没怎么接触dp的童鞋可以注意一下。

dp题的难点其实就是在于找到i-1和i之间的关系,找到了就不难。

蓝桥杯 砝码称重 C语言相关推荐

  1. 【蓝桥杯-砝码称重】

    蓝桥杯-砝码称重 问题描述: 你有一架天平和 N 个砝码,这 N 个砝码重量依次是 W1, W2, · · · WN 请你计算一共可以称出多少种不同的重量? 注意砝码可以放在天平两边 输入的第一行包含 ...

  2. 蓝桥杯 砝码称重【第十二届】【省赛】【B组】

    动态规划思想解题 将砝码按照输入的顺序,依次加入称量的过程中. dp[0][]表示的是在加入第一个砝码后,当前可以表示称重的重量: 如题干中,砝码加入的顺序是1 4 6,故在第一个砝码(即重量为1的砝 ...

  3. 蓝桥杯—砝码称重—Java

    1.问题描述 2. 样例说明 3.思路解析 例如:我们输入3个砝码,分别是1,4,6 当输入第一个砝码(1)时,可以称出重量为:1 再输入第二个砝码(4)时,可以称出的重量为:1,(4 - 1),(4 ...

  4. 蓝桥杯 砝码称重【第十二届】【动态规划】以及一些总结

    写在前面:没有ac,只过了80%样例,我的dp并不是这道题的最优dp算法!先这样骗点分吧,dp在学了,在学了( 思路:每次加入一个砝码a,让a与a之前产生的所有值进行加减运算以产生新值(记得考虑a本身 ...

  5. ZCMU--5239: 砝码称重(C语言)

    Description 现有n个砝码,第i个砝码的重量为ai,你至多能选择三个砝码进行称重,请问对于1-w中的所有整数,有多少数字能被这n个砝码称出来? Input 单组测试数据,第一行输入两个正整数 ...

  6. 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-936 砝码称重

    第十四届蓝桥杯集训--练习解题阶段(无序阶段)-ALGO-936 砝码称重 目录 第十四届蓝桥杯集训--练习解题阶段(无序阶段)-ALGO-936 砝码称重 前言 关于数学的疑问 算法训练 砝码称重 ...

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

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

  8. 砝码称重【第十二届蓝桥杯】【省赛】【B组】

    砝码称重[第十二届蓝桥杯][省赛][B组] Description 你有一架天平和N个砝码,这N个砝码重量依次是W1.W2,-WN 请你计算一共可以称出多少种不同的重量? 注意砝码可以放在天平两边. ...

  9. 第十二届蓝桥杯省赛 C/C++大学B组 试题G:砝码称重

    试题题目: 本题为编程题第二题 解题思路: 方法一:暴力求解 1.分析    首先利用数组W[N]W[N]W[N]记录NNN块砝码的质量.    模拟放取过程.先取第一块砝码放在天平上,再取第二块砝码 ...

  10. 【题解】【蓝桥杯】试题 历届真题 砝码称重【第十二届】【省赛】【B组】

    题目链接 试题 历届真题 砝码称重[第十二届][省赛][B组] 题目描述 解题思路 暴力,两个map,分别存储当前能称出的重量和遍历时用于计算的重量 需要注意的三点是 abs函数是在math.h里面的 ...

最新文章

  1. CSS中zoom和scale的区别
  2. js原型prototype属性用法实例
  3. 数组字符串转化成数组与eval函数
  4. acm常见算法及例题
  5. 搞定WordPress的日志自动截断
  6. MySQL Connector/ODBC 5.2.4 发布
  7. php xml 返回 微信,php版微信返回用户text输入的方法
  8. 阿里工程师是如何系统化地总结缓存相关知识的
  9. WordPress网站迁移数据最佳解决方案
  10. 红黑树(Red-Black Tree)
  11. BZOJ1114 : [POI2008]鲁滨逊逃生Rob
  12. wordpress文章发布时区时间延迟8小时解决方法
  13. Lucene4:创建一个简单查询
  14. 【图像分割】基于matlab遗传算法优化K聚类图像分割【含Matlab源码 1605期】
  15. 基于单片机的贪吃蛇游戏设计仿真
  16. DNS劫持新方法(“侧信道攻击“攻破“端口随机化“的研究)
  17. Linux 字体存放位置及字体安装
  18. 基于安卓的共享单车设计与实现
  19. Oracle 查询表空间及某个表的大小
  20. 【Unity3D】坦克对战游戏 AI 设计

热门文章

  1. Henley Partners:马耳他、奥地利、葡萄牙提供全球绝佳投资移民计划
  2. 库卡机器人提示无合适的mam文件处理
  3. CELF(Cost-Effective Lazy Forward selection)具有成本效益的惰性前向选择算法
  4. 大数运算(大数的幂)
  5. 云南省计算机一级C类考试知识点,2018云南事业单位C类考试实验设计常见题型
  6. 准双向口与双向口的差别
  7. 一个div盒子里文字如何置于左上角
  8. React劲爆新特性Hooks重构去哪儿网火车票PWA
  9. 3月1日.上交所买入股票, 成交价格为10元/股,成交数量为1000股(券商承担经手费和证管费,佣金:0.3% 。。。请写出3.1-3.6的全部股票业务凭证分录、核算金额及计算过程
  10. [Inside HotSpot] 模板解释器