hdu 4091 线性规划
分析转自:http://blog.csdn.net/dongdongzhang_/article/details/7955136
题意 : 背包能装体积为N, 有两种宝石, 数量无限, 不能切割。 分别为 size1 value 1 size2 value2
问背包能装最大的价值?
思路 : 线性规划问题。 有一组坑爹数据 100 3 3 7 7 一般的会输出 99 但是结果是 100 各10颗
线性规划知识, x, y 分别为 取两种宝石的数量 目标函数 : z = v1 * x + v 2 * y; K = -(v1 / v2);
1. x >= 0;
2. y >= 0;
3. s1 * x + s2 + y <= N; k = - (s1 / s2);

若 abs(K) > abs (k) 那么 将相交与B。 若abs(K) == abs(k) 整条直线都可以。 若 abs(K) < abs(k) 相交与A
其实 abs(K) = v1 / v2 > abs(k) = s1 / s2 正好是 价值比的比较, v1 / s1 > v2 / s2 ,v1价值大, 就应该 x 大些, 取1宝石多些。
同理 价值相同 就应该 x, y 取什么都可以, v2 价值大, 就应该 y 大些, 取2宝石多些。
但是 宝石不能切割, 所以。 就形成了一个区域, 在最优解附近。 所以区域附近的点 需要枚举。
不过有一个不变的是, 在两宝石的体积的最小公倍数内, 肯定取价值大。
而在最小公倍外的,就要分别枚举。 不能盲目的取价值大。
比如一个例子, 20 4 5 6 8 答案是 26 = 2 * 5 + 2 * 8。 若只取价值大的, 会装不满。 没取到最优解。
4 与 6 的最小公倍数是 12. 那每一个12的体积 就应该取 2个 宝石2 因为宝石2价值大。
剩余的8 就有取枚举, 0 * 5 + 1 * 6 , 或者 1 * 5 + 0 * 6, 或者 2 * 5 + 0 * 6 那么就取2个宝石1. 就能装满了, 并且价值最大。
但是 如果是 15 4 5 6 8 的话, 那么按照这方法就会输出 16 只能取到 2个 宝石2 剩余3体积, 不能取到任意宝石。
答案应该是 18 = 2 * 5 + 1 * 8, 少取一个宝石2,腾出6体积,并 利用剩余的3体积的2体积 取两颗宝石1,价值更大。
所以,面对这问题。 我们就应该至少腾出一个公倍数的空间才枚举。 不然就会出错。
#include<stdio.h>
#include<algorithm>
using namespace std;
long long gcd(long long da,long long xiao)
{
long long temp;
while(xiao!=)
{
temp=da%xiao;
da=xiao;
xiao=temp;
}
return da;
}
int main()
{
int iCase=;
int T;
scanf("%d",&T);
long long N,S1,V1,S2,V2;
while(T--)
{
iCase++;
scanf("%I64d%I64d%I64d%I64d%I64d",&N,&S1,&V1,&S2,&V2);
long long tmp=S1*S2/gcd(S1,S2);
long long res;
long long tt=N/tmp;
N=N%tmp;
if(tt)
{
tt--;
N+=tmp;
}
res=max((tt)*(tmp/S1)*V1,(tt)*(tmp/S2)*V2);
long long res2=;
if(S2>S1)
{
long long t;
t=S1;S1=S2;S2=t;
t=V1;V1=V2;V2=t;
}
for(int i=;i<=N/S1;i++)
{
if(res2<i*V1+(N-i*S1)/S2*V2)res2=i*V1+(N-i*S1)/S2*V2;
}
res+=res2;
printf("Case #%d: %I64d\n",iCase,res);
}
return ;
}
hdu 4091 线性规划的更多相关文章
- hdu 4091 Zombie’s Treasure Chest(数学规律+枚举)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4091 /** 这题的一种思路就是枚举了: 基于这样一个事实:求出lcm = lcm(s1,s2), n ...
- HDU 4091 Zombie’s Treasure Chest 分析 难度:1
Zombie’s Treasure Chest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- hdu 4091 Zombie’s Treasure Chest 贪心+枚举
转自:http://blog.csdn.net/a601025382s/article/details/12308193 题意: 输入背包体积n,绿宝石体积s1,价值v1,蓝宝石体积s2,价值v2,宝 ...
- hdu 4091
#include<stdio.h> #include<math.h> __int64 gcd(__int64 a,__int64 b) { if(b==0) return ...
- hdu 4091 数学思维题贪心
/* 参看博客地址:http://blog.csdn.net/oceanlight/article/details/7857713 重点是取完最优的后剩余的rest=n%lcm+lcm;中性价比小的数 ...
- hdu 4128 Running relay (线性规划转半平面交)
Problem - 4128 对偶线性规划转半平面交,这题的正解O(nlogn)解法,目前网上没有找到这样的正解. 原来的不等式组, sigma{-si*xi}>=-W+d*sigma{si} ...
- HDU 5643 King's Game 打表
King's Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5643 Description In order to remember hi ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
随机推荐
- git小结
1.创建本地与远程分支 先创建远程分支,再创建本地分支,再将本地分支与远程分支关联git fetch 获取远程分支git checkout remote_branch 或者 git checkout ...
- 如何修改ubuntu系统的电脑名(主机名)
在按照ubuntu系统时,会提示你给电脑填写一个名字,可能当时你没有想好,就随便填写了一个,可是以后就又有新的想法,想重新更换一个名字,该怎么办呢? 其实很简单.按照下面的步骤即可. 进去后,修改完, ...
- mysql 查询技巧
查出来的结果每一行显示一条,中间以*号分隔. select * from tableName limit 10 \G mysql 随机取数据 SELECT * FROM table_name ORDE ...
- 【原创】ui.router源码解析
Angular系列文章之angular路由 路由(route),几乎所有的MVC(VM)框架都应该具有的特性,因为它是前端构建单页面应用(SPA)必不可少的组成部分. 那么,对于angular而言,它 ...
- php面试题之四——Linux部分(高级部分)
四.Linux部分 1.请解释下列10个shell命令的用途(新浪网技术部) top.ps.mv.find.df.cat.chmod.chgrp.grep.wc top:该命令提供了实时对系统处理器状 ...
- mongo链接报错:couldn't connect to server 127.0.0.1:27017 (127.0.0.1)
angela@angeladeMacBook-Air:/data/db$mongo MongoDB shell version: 2.6.1 connecting to: test 2014-06-0 ...
- HTML快速入门4
七.表单 1. 概述 建立交互式的站点,需要使用 HTML 表单,它可以让用户提供信息,并对此作出处理.可以建立类似 复选框.单选按钮及文本框的控件. 掌握表单的使用对 Active Server P ...
- Nmap备忘单:从探索到漏洞利用(Part 2)
这是我们的第二期NMAP备忘单(第一期在此).基本上,我们将讨论一些高级NMAP扫描的技术,我们将进行一个中间人攻击(MITM).现在,游戏开始了. TCP SYN扫描 SYN扫描是默认的且最流行的扫 ...
- Ubuntu 更改文件夹权限及chmod详细用法
转自: http://blog.chinaunix.net/uid-21880738-id-1813031.html 对Document/目录下的所有子文件与子目录执行相同的权限变更: Documen ...
- x:Name标记特性与Name属性
本文转载自silvergingko的专栏 在Xaml中定义了一个元素后,如果后面要使用该元素,则必须为该元素定义一个元素名称,在随后的Xaml中,通过元素名称来使用该元素. 在Xaml中,元素的名称定 ...