分析转自: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 线性规划的更多相关文章

  1. hdu 4091 Zombie’s Treasure Chest(数学规律+枚举)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4091 /** 这题的一种思路就是枚举了: 基于这样一个事实:求出lcm = lcm(s1,s2), n ...

  2. HDU 4091 Zombie’s Treasure Chest 分析 难度:1

    Zombie’s Treasure Chest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  3. hdu 4091 Zombie’s Treasure Chest 贪心+枚举

    转自:http://blog.csdn.net/a601025382s/article/details/12308193 题意: 输入背包体积n,绿宝石体积s1,价值v1,蓝宝石体积s2,价值v2,宝 ...

  4. hdu 4091

    #include<stdio.h> #include<math.h> __int64 gcd(__int64 a,__int64 b) {  if(b==0)   return ...

  5. hdu 4091 数学思维题贪心

    /* 参看博客地址:http://blog.csdn.net/oceanlight/article/details/7857713 重点是取完最优的后剩余的rest=n%lcm+lcm;中性价比小的数 ...

  6. hdu 4128 Running relay (线性规划转半平面交)

    Problem - 4128 对偶线性规划转半平面交,这题的正解O(nlogn)解法,目前网上没有找到这样的正解. 原来的不等式组, sigma{-si*xi}>=-W+d*sigma{si} ...

  7. HDU 5643 King's Game 打表

    King's Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5643 Description In order to remember hi ...

  8. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

随机推荐

  1. 实现SVN与WEB同步解决方案(转)

    实现SVN与WEB同步解决方案 1)设置WEB服务器根目录为/www/default 2)checkout一份SVN svn co svn://localhost/oplinux /www/defau ...

  2. GTP V0 和 GTP V1

    GTP概述 GTP(GPRS Tunnelling Protocol)协议应用在SGSN 和GGSN 之间,为各个移动台(MS) 建立GTP 通道,GTP 通道是 GPRS服务节点(GSN) 之间的安 ...

  3. UML(统一建模语言)

    最近看了一个UML图,所以特意来了解一下UML 统一建模语言 锁定 同义词 UML(统一建模语言)一般指统一建模语言 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . Unified Mo ...

  4. C语言回调函数

    Callbacks have a wide variety of uses. For example, imagine a function that reads a configuration fi ...

  5. 微信公开课发布微信官方教程:教你用好微信JS-SDK接口

    微信公众平台开放JS-SDK(微信内网页开发工具包),说明文档已经有相关使用方法和示例了,很多同学觉得不是很直观,为此微信公开课发布微信官方教程:教你用好微信JS-SDK接口. 1.分享类接口:支持获 ...

  6. XSS跨站脚本攻击实例讲解,新浪微博XSS漏洞过程分析

    2011年6月28日晚,新浪微博遭遇到XSS蠕虫攻击侵袭,在不到一个小时的时间,超过3万微博用户受到该XSS蠕虫的攻击.此事件给严重依赖社交网络的网友们敲响了警钟.在此之前,国内多家著名的SNS网站和 ...

  7. 关于 CAS 不能登录的问题

    经过排查,是因为 Capistrano 部署中设置了 http_proxy.此时通过 cas.m.xxxx.com 域名去访问 CAS 服务时,就不通了,需要修改为 IP 来访问. 但是公司的 CAS ...

  8. HTML 快速入门

     最近帮朋友研究作一个网站,虽然对很多人来说这是很简单的事情,但是对我来说却比较复杂!废话不多讲了,看看我找的HTML快速入门,说不定也会对你有帮助! 一. HTML 的基本概念 HTML ( Hyp ...

  9. HTML前端--各种小案例

    掬一捧清水,放逐在江河,融入流逝的岁月,将心洗净; 捻一缕心香,遥寄在云端,在最深的红尘里重逢,将心揉碎; 望一程山水,徘徊在月下,在相思渡口苦守寒冬,将心落寞. 案例一: 隐藏扩展域,并去掉afte ...

  10. [ruby on rails] 跟我学之(2)HelloWorld

    1. 创建工程 rails new blog 2.查看下文件结构 tree 输出如下,请留意红圈中的部分. Gemfile, 用来管理应用程序的gems, 有点类似于python的包,有专门的网站来查 ...