http://poj.org/problem?id=1837

(1)用dp[i][j]表示挂了 i 个重物时 平衡度为 j 的数目;

(2)核心部分:

for(j=1;j<=m;j++)for(k=0;k<=15000;k++)if(dp[j-1][k])for(i=1;i<=n;i++)dp[j][k+c[i]*g[j]]+=dp[j-1][k];

其中, j  表示重物编号, k  是背包, i  为所挂位置。注意循环的顺序,先确定重物,再打开背包,最后逐个转移平衡度。

(3)由于力矩的变化才是本题的关键,将中间位置设为平衡位置(dp[0][7500]=1;),力矩为7500时即为平衡。

具体代码:

View Code

#include<stdio.h>
#include<string.h>
int n, m;
int g[21], c[21];
int dp[21][15001];
int main()
{int i, j, k;while(scanf("%d%d", &n, &m)!=EOF){for(i=1;i<=n;i++) scanf("%d", &c[i]);for(j=1;j<=m;j++) scanf("%d", &g[j]);memset(dp, 0, sizeof(dp));dp[0][7500]=1;for(j=1;j<=m;j++)for(k=0;k<=15000;k++)if(dp[j-1][k])for(i=1;i<=n;i++)dp[j][k+c[i]*g[j]]+=dp[j-1][k];printf("%d\n", dp[m][7500]);}
}

转载于:https://www.cnblogs.com/tim11/archive/2012/08/16/2642071.html

opj1837 Balance(dp)相关推荐

  1. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  2. LeetCode 编辑距离 II(DP)

    1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...

  3. LeetCode 1220. 统计元音字母序列的数目(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...

  4. LeetCode 265. 粉刷房子 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...

  5. LeetCode 256. 粉刷房子(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...

  6. LeetCode 1223. 掷骰子模拟(DP)

    1. 题目 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始 ...

  7. LeetCode 1155. 掷骰子的N种方法(DP)

    1. 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target,请你 ...

  8. LeetCode 1139. 最大的以 1 为边界的正方形(DP)

    1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量.如果不存在,则返回 0. 示例 1: 输入:grid ...

  9. 程序员面试金典 - 面试题 17.23. 最大黑方阵(DP)

    1. 题目 给定一个方阵,其中每个单元(像素)非黑即白. 设计一个算法,找出 4 条边皆为黑色像素的最大子方阵. 返回一个数组 [r, c, size] ,其中 r, c 分别代表子方阵左上角的行号和 ...

最新文章

  1. html表白_HTML 表白网页
  2. 每日一水:HDOJ 1408 盐水的故事
  3. oracle 磁盘不分区吗,LINUX停ORACLE软件、数据文件等所在的磁盘分区空间不足的解决思路...
  4. node异步非阻塞的杂谈
  5. php sql语句过滤,php如何做sql过滤
  6. 前端学习(1330):数据库相关概念
  7. ipv6 ospf配置方法_【思唯网络学院】网络故障大全及处理原理和方法
  8. 流行歌单片机c语言编程,单片机6首音乐播放的proteus仿真电路及C语言程序设计...
  9. layui弹出层:皮肤扩展(文档解读)
  10. android 动态改变listview的内容
  11. Android仿人人客户端(v5.7.1)——应用主界面之左侧面板UI实现
  12. Pig、Hive、MapReduce 解决分组 Top K 问题
  13. 第三部分数据结构[专业课考试3]
  14. 序列平稳性和纯随机性检验
  15. R实战之从头到尾分析广告数据集
  16. 微信小程序添加服务器域名
  17. 官网Tomcat下载方法
  18. 添加企业微信免验证设置
  19. 小学算术运算测试程序java_Java实现小学四则运算练习系统(UI)
  20. 斩获 offer 的 Java 面试宝典

热门文章

  1. [深度学习]什么叫梯度学习
  2. TestNG学习(一)
  3. Android项目实战登录注册
  4. WPF 图片splashScreen效果
  5. Struts 2 的学习笔记(二) struts的配置流程和strut是2的工作原理
  6. git 使用笔记(一)
  7. JDK6和JDK7中的substring()方法
  8. Github上不错的Android开源代码(一)
  9. Rest上传文件(利用jersey)
  10. 15款顶级开源人工智能工具推荐