//题意:先给定两个值c,g分别代表:在臂长为15(两边均15)的天平上的总的挂钩数和砝码个数。下一行为c个数字代表天平的哪些位置有挂钩,例如-2代表据天平中心向左2个距离 ;2代表据天平中心向右2个距离。最后一行有g个数字代表每个砝码的重量。题目要求是两边天平保持平衡的挂法。

//思路:天平最极端的情况为 +15*max_g*max_c,-15*max_g*max_c,那么将此题转换为一个dp问题,这里每放一个砝码根据挂钩个数的不同会有多个状态,那么当前状态必可由上一个状态转化。申请dp[i][j]状态数组,他代表当放上i个砝码后处于j这个状态的次数,-7500 <= j >=7500, dp[i][0]此时相当于处于平衡状态,可以将这个数组抽象为数轴,j<0天平向左倾斜,j>0天平向右倾斜。因为数组下标为正,则将j转化为0~15000, j==7500时代表之前的dp[i][0]. 那么此时要注意挂i个砝码生成的新的状态由i-1个状态转化 则dp[i][j] =dp[i][j] + dp[i-1][j];这个其实挺好理解的,1)若有i-1个砝码到达dp[i-1][j]这个状态共有num种方式,那么在要挂一个砝码到达j状态时必然也是num种;  2)但是挂这一个砝码有不同的位置,则可能在不同位置挂这一个砝码时得到相同的状态j则要将当前状态值加上j状态此时究竟有多少种可能而不是dp[i][j]=dp[i-1][j],则dp[i][j] =dp[i][j] + dp[i-1][j]是j状态下的方程,那么对于要挂一个重量w的砝码在力臂为x情况下而生成一种新的状态j即,dp[i][j+w*x] = dp[i][j+w*x] + dp[i-1][j] ;见代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;int x[30];
int w[30];
int dp[30][15010];int main()
{int c, g;while(scanf("%d%d", &c, &g) != EOF){memset(x, 0, sizeof(x));memset(w, 0, sizeof(w));memset(dp, 0, sizeof(dp));dp[0][7500] = 1;for(int i = 1; i <= c; i++)scanf("%d", &x[i]);for(int i = 1; i <= g; i++)scanf("%d", &w[i]);for(int i = 1; i <= g; i++){for(int j = 0; j <= 15000; j++){if(dp[i-1][j]){for(int k = 1; k <= c; k++){dp[i][j+w[i]*x[k]]+=dp[i-1][j];    //这里如上面蓝色部分推的理解很重要}}}}printf("%d\n", dp[g][7500]);}return 0;
}

poj1837 balance相关推荐

  1. POJ-1837 Balance

    题目链接:http://poj.org/problem?id=1837 题目大意: 给你c(2<=c<=20)个挂钩,g(2<=g<=20)个砝码,求在将所有砝码(砝码重1~~ ...

  2. 暑假N天乐 —— 多重+分组背包及变形

    [HDU-1114 Piggy-Bank] 完全背包裸题 http://acm.hdu.edu.cn/showproblem.php?pid=1114 一道迷路的完全背包跑到了这里来...相当于给定背 ...

  3. POJ1837 DP

    POJ1837 DP题 题目一开始看了N久-意思大概是有一个天平,左边臂长是-15到0,右边臂长是0到15,给你c个挂钩,g个砝码,每一个砝码重量都在1到25,问将所有砝码挂到天平上并使之平衡的方案有 ...

  4. HDU 5616 Jam's balance(01背包)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=5616 题目: Jam's balance Time Limit: 2000/1000 MS (Java ...

  5. SAP 金属行业实施项目的GAP之Metall Balance

    去年7月初笔者加入D项目之初,就听闻该项目有一个复杂的需求或者说GAP,即是金属平衡. 客户所在的行业是金属加工制造行业,为汽车生产某个关键零部件.客户提出,整个生产过程,没有化学反应产生,理论上生产 ...

  6. HDFS集群balance(3)-- 架构细节

    转载请注明博客地址:http://blog.csdn.net/suileisl HDFS集群balance,对应版本balance design 6 如需word版本,请QQ522173163联系索要 ...

  7. 负载均衡设备oracle,Oracle RAC 服务器端联接负载均衡(Load Balance)

    Oracle RAC 服务器端连接负载均衡(Load Balance) Oracle RAC服务器端的负载均衡是根据RAC中各节点的连接负荷数情况,将新的连接请求分配到负荷最小的节点上去.当数据库处于 ...

  8. hdfs haadmin使用,DataNode动态上下线,NameNode状态切换管理,数据块的balance,HA下hdfs-api变化(来自学习资料)

    1.2.4集群运维测试 HA集群中两个namenode状态的管理命令 [root@mini2 hadoop-2.6.4]# bin/hdfs haadmin Usage: DFSHAAdmin [-n ...

  9. Oracle RAC 客户端连接负载均衡(Load Balance)

    实现负载均衡(Load Balance)是Oracle RAC最重要的特性之一,主要是把负载平均分配到集群中的各个节点,以提高系统的整体吞吐能力.通常情况下有两种方式来实现负载均衡,一个是基于客户端连 ...

最新文章

  1. HTML的标签描述17
  2. 用户吐槽:Azure DevOps CI 体验太差
  3. android edittext输入邮箱,[Android教程]EditText怎样限制用户的输入?数字/字母/邮箱
  4. macOS安装Maven_IDEA集成Maven
  5. 06Struts2国际化实现
  6. html5操作类名API——classlist
  7. 供应商去市网维护银行账号信息_供应商信息中心是BBP系统中一项很重要的内容...
  8. python自动化办公能做什么-用Python自动办公,做职场高手(完结)
  9. Java开发笔记(一百三十二)Swing的表格
  10. 智伴机器人wifi键在哪里_智伴机器人连不上WiFi
  11. linux安装阵列卡驱动程序,linux 安装阵列卡驱动
  12. 至简设计系列_7段数码管显示
  13. ROS-Control专题:PR2的六个概念【5】
  14. 迅雷欲缔造互联网“视频梦工厂”
  15. Mapbox加载天地图CGCS2000矢量瓦片地图服务
  16. BIOS怎么开启UEFI模式|电脑设置UEFI启动的方法
  17. 使用 Python 生成迷宫
  18. 利用机器学习方法对猪肉价格预测
  19. php快速计算子网掩码的前缀长度
  20. openlayers 展示gif的2种方案

热门文章

  1. 哈雷拆分LiveWire上市,冲击美股电摩第一股
  2. 认识substrate
  3. paddle 40 支持任意维度数据的梯度平衡机制GHM Loss的实现(支持ignore_index、class_weight,支持反向传播训练,支持多分类)
  4. dw常用标签_dreamweaver中常用到的标签及含义
  5. oracle 延迟段,DUL 支持Oracle 19c , 如何手动处理延迟段创建的表
  6. Tarjan算法超详细讲解(割点割边强连通)
  7. CAD批量打图精灵更新至9.5.3,支持使用Adobe PDF虚拟打印机以创建高质量的PDF文件。
  8. IPGuard文档加密基本设置步骤
  9. [Kudu基础]--Kudu+Impala介绍 | 微店数据科学团队博客
  10. layui table数据表格前端分页