@

题目 【80分】

你有一架天平和N个砝码,这N个砝码重量依次是W1,W2,……,WN请你计算一共可以称出多少种不同的重量?

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

【样例输入】

3

1 4 6

【样例输出】

10

思路

这是一道动态规划题

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组

知识点

将dp初始化为0,二维数组

对于第一个加入的dp[i][array[0]]=1标记为能称出的重量

最终dp:

[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

第一次加入1,所以在dp[0,1] 这里标记为1

[0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0]

第二次加入4,所以在dp[1][4] 这里标记为1,之前的状态为dp[0][1]也是为1,之后在加入4之后;4+1=5,所以dp[1][5]标记为1,abs(1-4)==3,所以dp[1][3]也标记为1;

[0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]

同理:

所以最后求解个数的时候只需要将求解dp数组最后一行有多少个1,也就能得出答案

思路是没问题,不过这道题最后两个测试样例超时了只有80分

代码


n = int(input())
array = list(map(int, input().split())) sum = sum(array)
a_len = len(array)
ans = 0
dp = [[0 for i in range(sum+1)] for j in range(a_len)] dp[0][array[0]]=1 # no1 for i in range(1,a_len):
for j in range(1,sum+1):
dp[i][j]=dp[i-1][j] # copy 对于当前的复制前一个的重量
dp[i][array[i]]=1 # 当前状态是可称的
for j in range(1, sum+1): # 最大重量为所有砝码重量总和
if(dp[i-1][j]): #pre=1 上一个状态的重量
dp[i][j+array[i]] = 1 # 上一状态的重量在加上当前重量
dp[i][abs(j-array[i])]=1 # 上一个状态的重量减去当前状态的重量 for i in range(1,sum+1):
if(dp[n-1][i]):
ans += 1 print(ans)

【蓝桥杯】第十二届蓝桥杯砝码称重(Python题解)的更多相关文章

  1. P2347 砝码称重(动态规划递推,背包,洛谷)

    题目链接:P2347 砝码称重 参考题解:点击进入 纪念我第一道没理解题意的题 ''但不包括一个砝码也不用的情况'',这句话我看成了每个砝码起码放一个 然后就做不出来了 思路: 1.这题数据很小,10 ...

  2. Java实现 蓝桥杯VIP 算法提高 盾神与砝码称重

    算法提高 盾神与砝码称重 时间限制:1.0s 内存限制:256.0MB 提交此题 查看参考代码 问题描述 有一天,他在宿舍里无意中发现了一个天平!这个天平很奇怪,有n个完好的砝码,但是没有游码.盾神为 ...

  3. 安徽省2016“京胜杯”程序设计大赛_A_砝码称重

    砝码称重 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 61 Accepted: 37 Description 小明非常喜 ...

  4. NOI题库--砝码称重V2(多重背包2^n拆分)

    以前只会写多重背包的原版,渣的不行,为了做此题不得不学习了一下,发现其实也不难,只要理解了方法就好多了(PS:其实和倍增挺像的) 8756:砝码称重V2 总时间限制: 1000ms 内存限制: 655 ...

  5. Codevs No.2144 砝码称重2

    2016-05-31 22:01:16 题目链接: 砝码称重2 (Codevs No.2144) 题目大意: 给定N个砝码,求称出M的重量所需砝码最小个数 解法: 贪心 使砝码数量最小,当然是每个砝码 ...

  6. P2347 砝码称重-DP方案数-bitset

    P2347 砝码称重 DP做法 : 转化为 01背包. 进行方案数 更新.最后统计种类. #include<bits/stdc++.h> using namespace std; #def ...

  7. 51nod 1449 砝码称重 (进制思想)

    1449 砝码称重 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 现在有好多种砝码,他们的重量是 w0,w1,w ...

  8. 51nod 1837 砝码称重【数学,规律】

    题目链接:51nod 1837 砝码称重 小 Q 有 n 个砝码,它们的质量分别为 1 克. 2 克.……. n 克. 他给 i 克的砝码标上了编号 i (i = 1, 2, ..., n),但是编号 ...

  9. P2347 砝码称重

    P2347 砝码称重 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1 ...

  10. Codevs 2144 砝码称重 2

    2144 砝码称重 2  时间限制: 1 s  空间限制: 16000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 有n个砝码,现在要称一个质量为m ...

随机推荐

  1. 【GS模型】使用R包sommer进行基因组选择的GBLUP和RRBLUP分析?

    目录 简介 GS示例代码 简介 R包sommer内置了C++,运算速度还是比较快的,功能也很丰富,可求解各种复杂模型.语法相比于lme4包也要好懂一些. 建议查看文档:vignette("v ...

  2. Linux—yum的python版本错误——初级解决方案

    为了安装rrdtool,发现不是少这个就是少那个,最后发现yum也不能用. 从网上找的解决yum问题. 转自:http://doarthon.blog.51cto.com/3175384/728809 ...

  3. 使用 JDBC 驱动程序

    本部分提供使用 Microsoft JDBC Driver for SQL Server 与 SQL Server 数据库建立简单连接的快速入门指导.在连接到 SQL Server 数据库之前,必须首 ...

  4. jquery时间轴tab切换效果实现结合swiper实现滑动显示效果

    需求:根据时间轴进行tab页面内容切换(时间轴需要滑动查看并选择) 实现思路: 结合swiper插件实现滑动显示效果 根据transform: translateX进行左侧切换效果的实现(具体实现cs ...

  5. 从零构建Java项目(Maven+SpringBoot+Git) #02 奥斯丁项目

    前两天我说要写个项目来持续迭代,有好多小伙伴都表示支持和鼓励,项目的第一篇这不就来了么~我给项目取了个名字,英文名叫做:austin,中文名叫做:奥斯丁 名字倒没有什么特别的含义,我单纯觉得这个名字好 ...

  6. ace

    ace An ace is a playing card, die or domino with a single pip. In the standard French deck, an ace h ...

  7. 零基础学习java------day4------流程控制结构

    1. 顺序结构 代码从上往下依次执行 2. 选择结构 也叫分支结构,其会根据执行的结果选择不同的代码执行,有以下两种形式: if  语句 switch  语句 2.1 if 语句 2.1.1  if语 ...

  8. 一起手写吧!promise.all

    Promise.all 接收一个 promise 对象的数组作为参数,当这个数组里的所有 promise 对象全部变为resolve或 有 reject 状态出现的时候,它才会去调用 .then 方法 ...

  9. Oracle 学习PL/SQL

    先上一张实用的图:用于转义字符的. SQL> select chr(42) ||'is what?' from dual; CHR(42)||---------*is what? 想转义哪个就转 ...

  10. node.js require() 源码解读

    时至今日,Node.js 的模块仓库 npmjs.com ,已经存放了15万个模块,其中绝大部分都是 CommonJS 格式.这种格式的核心就是 require 语句,模块通过它加载.学习 Node. ...