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

(1)不是单纯的01背包问题,硬币有去有回(即有正有负),这使得用想买你的解法,上限难以确定,所以我开了dp[10000]的数组,还未得到好的优化和解释;

(2)对比两种写法:

1)

for(i=1;i<=6;i++)for(j=a[i];j<=N;j++)dp[j]=min(dp[j], dp[j-a[i]]+1);
for(i=1;i<=6;i++)for(j=N-a[i];j>=0;j--)dp[j]=min(dp[j], dp[j+a[i]]+1);

2)

for(i=1;i<=6;i++)
{for(j=a[i];j<=N;j++)dp[j]=min(dp[j], dp[j-a[i]]+1);for(j=N-a[i];j>=0;j--)dp[j]=min(dp[j], dp[j+a[i]]+1);
}

后一种解法是错误的。其实想一想,背包装的都是“正值”,没见过正负混合装的背包,这里所谓的有正有负,其实本质上是两个背包同时起作用的结果,第二个背包的想过直接叠加在第一个上了。

具体代码:

View Code

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int N=10000;
const int Inf=1<<29;
int a[10];
int dp[N+1];
int main()
{int i, j, k, t;while(scanf("%d", &t)!=EOF){while(t--){for(i=1;i<=6;i++) scanf("%d", &a[i]);for(i=1;i<=N;i++) dp[i]=Inf;dp[0]=0;for(i=1;i<=6;i++)for(j=a[i];j<=N;j++)dp[j]=min(dp[j], dp[j-a[i]]+1);for(i=1;i<=6;i++)for(j=N-a[i];j>=0;j--)dp[j]=min(dp[j], dp[j+a[i]]+1);int sum=0, Max=-1;for(i=1;i<=100;i++){sum+=dp[i];if(Max<dp[i]) Max=dp[i];}printf("%.2f %d\n", sum/100.0, Max);}}return 0;
}

当然,有分别处理两个背包,再由两者组合,查找出最优值,稍微麻烦一些。

具体代码:

View Code

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int N=100000;
const int Inf=1<<29;
int a[10];
int dp[N+1];
int main()
{int i, j, k, t;while(scanf("%d", &t)!=EOF){while(t--){for(i=1;i<=6;i++) scanf("%d", &a[i]);for(i=1;i<=N;i++) dp[i]=Inf;dp[0]=0;for(i=1;i<=6;i++)for(j=a[i];j<=N;j++)dp[j]=min(dp[j], dp[j-a[i]]+1);for(i=1;i<=6;i++)for(j=N-a[i];j>=0;j--)dp[j]=min(dp[j], dp[j+a[i]]+1);int sum=0, Max=-1;for(i=1;i<=100;i++){sum+=dp[i];if(Max<dp[i]) Max=dp[i];}printf("%.2f %d\n", sum/100.0, Max);}}return 0;
}

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

poj 1252 Euro Efficiency (01背包变形)相关推荐

  1. poj 2063 Investment(01背包变形)

    http://poj.org/gotoproblem?pid=2063 (1)上限 m 一直上升的 n 次01背包问题,比一般的01背包多了一重循环: (2)本题出现了各种错误:1)刚开始,没注意 m ...

  2. POJ 1252 Euro Efficiency

    背包 要么 BFS 意大利是说给你几个基本的货币,组成 1~100 所有货币,使用基本上的货币量以最小的. 出口 用法概率.和最大使用量. 能够BFS 有可能 . 只是记得数组开大点. 可能会出现 1 ...

  3. codeforce Gym 101102A Coins (01背包变形)

    01背包变形,注意dp过程的时候就需要取膜,否则会出错. 代码如下: #include<iostream> #include<cstdio> #include<cstri ...

  4. P1734 最大约数和 01背包变形

    传送门 思路:01背包变形题.将i看成重量,i的因子看成价值即可.背包自然是s. /** * From: * Qingdao Agricultural University * Created by ...

  5. POJ 3624 Charm Bracelet 0-1背包

    传送门:http://poj.org/problem?id=3624 题目大意:XXX去珠宝店,她需要N件首饰,能带的首饰总重量不超过M,要求不超过M的情况下,使首饰的魔力值(D)最大. 0-1背包入 ...

  6. HDU 2546 饭卡 01背包变形

    饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  7. 2022-9-2何以包邮(01背包变形)(c/c++实测满分)

    总结:         此题是背包问题的变形,物品的价值和重量有所改变,背包的容量限制有所改变,但核心动态规划求法没有改变.只需要在背包问题的解法上根据题意对物品表示,答案输出进行改变即可. 背包算法 ...

  8. HDU 3466 01背包变形

    给出物品数量N和总钱数M 对于N个物品.每一个物品有其花费p[i], 特殊值q[i],价值v[i] q[i] 表示当手中剩余的钱数大于q[i]时,才干够买这个物品 首先对N个物品进行 q-p的排序,表 ...

  9. hdu 2184 01背包变形

    转自:http://blog.csdn.net/liuqiyao_01/article/details/8753686 题意:这是又是一道01背包的变体,题目要求选出一些牛,使smartness和fu ...

最新文章

  1. vector容器中erase(删除)的使用
  2. 让SpringBoot不再需要Controller、Service、Mapper,这款开源工具绝了!!!
  3. [原创]windows server 2012 AD架构 试验 系列 – 11AD域和站点部署(2)
  4. Spring boot项目整合Hadoop的HDFS
  5. 在网上收集了一部分关于使用Google API进行手机定位的资料和大家分享
  6. 写出表格的结构html,一个面试题,根据json结构生成html表格
  7. python字典实现原理_python学习笔记_第7天(字典底层原理+选择结构)
  8. java图片简单爬虫_[Java教程]使用jsoup进行简单的爬虫操作爬取图片
  9. 基于spring-boot的社区社交微信小程序,适合做脚手架、二次开发
  10. java两种不同单例模式_关于Java里的两种单例模式
  11. 程序猿的执业修养(七)——不要卖弄,多思慎言
  12. 神策2021秋招数据分析笔试
  13. 原核DNA甲基化简述
  14. Lenovo y50-70 黑苹果hackintosh 10.14.4 Mojave 更新后开机黑屏,引导失败,无法开机
  15. 开始学习python了鸭
  16. linux 多线程 压缩,24、Linux 多线程压缩工具pigz 的学习
  17. 【微信小程序】获取用户头像和ID
  18. 51nod 1205 流水线调度(Johnson规则)
  19. python知道三角形三边求面积(海伦公式)
  20. 微信转发后链接中不显示缩略图

热门文章

  1. 老男孩和门户网站学生聊天整理
  2. java文件选择器_java中文件选择器JFileChooser的用法
  3. python文件传输模块_[宜配屋]听图阁 - python 使用poster模块进行http方式的文件传输到服务器的方法...
  4. pandas分组计算平均值_python – 如何计算在Pandas中另一列上分组的平均值
  5. highCharts如何实现json数组数据的图形展示
  6. javascript:void(0)
  7. ts怎么转换成m3u8直播源_HLS及M3U8介绍
  8. atm机存款场景图_被ATM机吞掉的钱
  9. mysql flask-login_Flask框架通过Flask_login实现用户登录功能示例
  10. 华为双系统手机可以刷成单系统_「冯站长之家」今日聚焦:重大突破!华为手机鸿蒙系统2.0,正式面世!骂华为的“喷子”,可以休矣!...