http://poj.org/gotoproblem?pid=3260

(1)多重背包的处理方式:转化为分组背包(1,2,4,8,余数)。具体细节参见代码:

scanf("%d", &num[i]);
tn=num[i];
while(tn>0)
{if(tn<x) {map[i][tot++]=tn;break;}map[i][tot++]=x;tn-=x; x*=2;
}

(2)接下来是装多重背包,注意细节  for(j=0;map[i][j];j++)

           而不是      for(j=1;map[i][j];j++)

进而用万群被白调整,注意循环顺序:for(k=V-mon[i];k>=0;k--)

               而不是 for(k=0;k<=V-mon[i];k++)

(3)悬而未解之问:取上限为V=10000就AC了,不合常理,应该是数据问题吧。。。

  有待解决。

具体代码:

View Code

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int N=11000;
const int Inf=1<<29;
int n, m, V;
int mon[120], num[120];
int map[120][20];
int dp[N];
int main()
{int i, j, k;while(scanf("%d%d", &n, &m)!=EOF){for(i=1;i<=n;i++) scanf("%d", &mon[i]);memset(map, 0, sizeof(map));for(i=1;i<=n;i++){int x=1, tot=0, tn;scanf("%d", &num[i]);tn=num[i];while(tn>0){if(tn<x) {map[i][tot++]=tn;break;}map[i][tot++]=x;tn-=x; x*=2;}}V=10000;for(i=0;i<=V;i++) dp[i]=Inf;dp[0]=0;for(i=1;i<=n;i++)for(j=0;map[i][j];j++)for(k=V;k>=map[i][j]*mon[i];k--)dp[k]=min(dp[k], dp[k-map[i][j]*mon[i]]+map[i][j]);for(i=1;i<=n;i++)for(k=V-mon[i];k>=0;k--)dp[k]=min(dp[k], dp[k+mon[i]]+1);if(dp[m]==Inf)  printf("-1\n");else printf("%d\n", dp[m]);}return 0;
}

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

poj 3260 The Fewest Coins(多重背包+完全背包)相关推荐

  1. 【题目记录】——POJ 3260 The Fewest Coins 混合背包

    POJ 3260 The Fewest Coins 题目地址[POJ 3260 The Fewest Coins] 题意:John要去买价值为m的商品. 现在的货币系统有n种货币,对应面值为val[1 ...

  2. POJ 3260 The Fewest Coins 最少硬币个数(完全背包+多重背包,混合型)

    题意:FJ身上有各种硬币,但是要买m元的东西,想用最少的硬币个数去买,且找回的硬币数量也是最少(老板会按照最少的量自动找钱),即掏出的硬币和收到的硬币个数最少. 思路:老板会自动找钱,且按最少的找,硬 ...

  3. [USACO06DEC]The Fewest Coins G(混合背包)

    [USACO06DEC]The Fewest Coins G 题目描述 Farmer John has gone to town to buy some farm supplies. Being a ...

  4. 【BZOJ 1716】 [Usaco2006 Dec]The Fewest Coins 找零钱(背包dp)

    题目 Description 农夫John想到镇上买些补给.为了高效地完成任务,他想使硬币的转手次数最少.即使他交付的硬币数与找零得到的的硬币数最少. John想要买T(1<=T<=100 ...

  5. 【POJ3260】The Fewest Coins 多重背包+完全背包

    A来B处买东西,价值M元,有N种钱,每种钱A有一定数量,而B有无限数量. 求最少用多少张钞票可以满足交易,比如样例,A出50+25,B找5,即可满足,需要3张. A用多重背包转移状态,B用完全背包. ...

  6. The Fewest Coins(多重背包+完全背包)

    The Fewest Coins(多重背包+完全背包) Farmer John has gone to town to buy some farm supplies. Being a very eff ...

  7. POJ 3260 多重背包+完全背包

    前几天刚回到家却发现家里没网线 && 路由器都被带走了,无奈之下只好铤而走险尝试蹭隔壁家的WiFi,不试不知道,一试吓一跳,用个手机软件简简单单就连上了,然后在浏览器输入192.168 ...

  8. The Fewest Coins (混合背包)

    有的物品只可以取一次或不取(基本的0-1背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包),就是混合背包问题. The Fewest Coins 题意: 农夫John ...

  9. 【POJ】 1014 Dividing(多重背包,优化)

    [POJ] 1014 Dividing(多重背包,优化) [题目链接]http://poj.org/problem?id=1014 题目 Description Marsha and Bill own ...

最新文章

  1. 1.4亿围观!宝藏副教授火速走红:如果不喜欢我的研究方向,我可以改!
  2. 光遇自动弹琴脚本代码_光遇弹琴辅助软件下载-光遇自动弹琴脚本代码下载v1.0_86PS软件园...
  3. 蔚蓝 游戏 android,永远的蔚蓝星球
  4. 数据库原理上机实验内容报告代码
  5. 重磅干货免费下载!阿里云RDS团队论文被数据库顶会SIGMOD 2018收录
  6. Nginx服务的ssl认证和htpasswd认证
  7. 94. autoload
  8. 漫游飞行_涨知识了,手机的飞行模式还能这么用?
  9. Java是传值还是传引用
  10. golang生成随机数
  11. R语言构建logistic回归模型:模型系数(model coefficient)、模型总结信息(summary)、模型评估(偏差deviance计算、伪R方计算( pseudo R-squared)
  12. 目标检测 (Detection) 算法综述
  13. 微信公众号页面中监听手机“返回”,并回到公众号里
  14. intellij idea maven项目jdk版本会自动重置
  15. mysql root误删_mysql 误删root
  16. 稿定科技内推|稿定让设计更简单,只要你来,稿定就能给你无限可能
  17. 计算机等级二级c语言英文,计算机等级考试二级C语言考试大纲(国外英文资料).doc...
  18. allure如何设置新logo
  19. 仿ofo单车做一个轮播效果
  20. tcpdump,tshark常用命令(一)

热门文章

  1. ubuntu shuangxitong
  2. opencv-api fitEllipse
  3. oracle linux hugepage,LInux下为什么配置HugePages及配置步骤
  4. 深圳大学计算机科学考研,深圳大学考研计算机专业要多少分数会被百分百录取...
  5. IDC机房对接阿里云
  6. 一个网卡配置两个不同网段的IP地址(比如应用道闸项目)
  7. 项目管理学习总结(6)——产品经理常用的工具有哪些?
  8. linux安装KVM
  9. python2.7安装sqlite3模块
  10. 通过样式调整input 中password text默认长度