POJ 1837 Balance DP 二维背包
来源:互联网 发布:java防止重复提交 编辑:程序博客网 时间:2024/04/30 14:05
传送门:POJ 1837 Balance
分析:
g个挂钩挂上的极限值:15*25*20==7500。
那么在有负数的情况下是-7500~~7500 此时的平衡点为0。
我们当然可以将平衡点往右移7500个单位,范围就变成了 0~~15000。(正化方便处理,这样平衡点就是7500)
代码如下:
#include <stdio.h>#include <string.h>int dp[21][15001]; // dp[n][W]表示前n个砝码在W重量处出现的方案数量int main(){ int i,j,k,C,G; int pos[21],wight[21]; while(scanf("%d%d",&C,&G)!=EOF){ for(i=1;i<=C;i++) scanf("%d",&pos[i]); for(i=1;i<=G;i++) scanf("%d",&wight[i]); // init memset(dp,0,sizeof(dp)); //每次记得初始化所有状态为0 dp[0][7500]=1; //两边不放砝码的平衡点方案为1 // 砝码是阶段 重量是状态 for(i=1;i<=G;i++) { for(j=0;j<=15001;j++) { for(k=1;k<=C;k++) { if(j >= pos[k]*wight[i]) // 重量 = 臂长X臂力 // 选择第i砝码放亦或是不放两种决策 dp[i][j] += dp[i-1][j-pos[k]*wight[i]]; // 求有多少种方案 故 += 而不是 max } } } printf("%d\n",dp[G][7500]); //输出前G个砝码,达到平衡点7500的方案数 } return 0;}
1 0
- POJ 1837 Balance DP 二维背包
- poj 1837 Balance 二维背包
- POJ 1837 Balance(二维dp)
- POJ 1837 Balance 背包dp
- poj 1837 Balance 二维费用背包
- No.1 DP 背包 POJ 1837 Balance
- poj 1837 Balance(DP 01背包)
- poj 1837 Balance (dp 01背包)
- poj 1837 Balance (dp,01背包)
- [poj 1837]Balance dp,01背包
- poj 1837 Balance -dp-01背包
- POJ 1837 Balance (DP-01背包)
- poj 1837 Balance(背包)
- POJ 1837 C - Balance(01背包)(dp)
- POJ 1837 Balance DP
- POJ--1837--Balance--DP
- POJ 1837 Balance (DP)
- POJ 1837 Balance DP
- 关于DOM的初步认识
- 数据结构用递归和非递归方法实现二分查找法
- 计算一个数组中相同元素对的数目
- MQTT初体验mosquitto的安装和使用
- sun.misc.BASE64Encoder找不到jar包的解决方法
- POJ 1837 Balance DP 二维背包
- flume学习(一)——安装和一个简单的netcat程序
- 一次生产事故的优化经历
- 查看linux的ftp服务是否安装
- 波动数列 解题报告
- SAP成本会计分录大全
- Swift 获得字符串String长度
- 微服务与持续交付
- python 数独游戏