51nod 1257 背包问题 V3
第1行:包括2个数N, K(1 <= K <= N <= 50000)
第2 - N + 1行:每行2个数Wi, Pi(1 <= Wi, Pi <= 50000)
输出单位体积的价值(用约分后的分数表示)。
3 2
2 2
5 3
2 1
3/4 一道经典问题,在《挑战程序设计竞赛第2版》143页中有原题,最大化平均值。
刚开始我也是想 按照z=p/w 排序,但是这种贪心有问题的。
想到二分答案。
假设知道答案x
那么我们知到总价值要>=x*k; Sum(p[i])/Sum(w[i])>=x;
Sum只有K个
那么S
Sum(p[i]>=Sum(w[i】*x);
于是 每次求Sum(p[i]-w[i]*x)>=0;求totx,toty最大 难看的代码:
#include<bits/stdc++.h> using namespace std;
typedef long long ll; #define N 211111
struct node
{
int w,p;
double c;
}a[N]; int cmp(node a,node b)
{
return a.c>b.c;
} int n,k;
ll gcd(ll x,ll y)
{
if (y==0) return x;
return gcd(y,x%y);
} ll ax,ay; int pan(double xx)
{
ll x,y;
x=y=0; for (int i=1;i<=n;i++)
a[i].c=1.0*a[i].p-xx*a[i].w; sort(a+1,a+n+1,cmp);
double sum=0;
for (int i=1;i<=k;i++)
{
sum+=a[i].c;
x+=a[i].p;
y+=a[i].w;
} if (sum>=0)
{
ax=x;
ay=y;
return 1;
}
return 0; } int main()
{
scanf("%d%d",&n,&k); for (int i=1;i<=n;i++)
scanf("%d%d",&a[i].w,&a[i].p);
double l=0,r=5000000000.0; for (int _=1;_<=100;_++)
{
double mid=(l+r)*0.5;
if (pan(mid)) l=mid;
else r=mid;
}
cout<<ax/gcd(ax,ay)<<"/"<<ay/gcd(ax,ay)<<endl;
return 0;
}
PS:做过的类型题,却忘记怎么解决.根本做了没有用。
的确要反思自己的学习方式了
51nod 1257 背包问题 V3的更多相关文章
- 51nod 1257 背包问题 V3(这不是背包问题是二分)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1257 题解:不能按照单位价值贪心,不然连样例都过不了 要求的 ...
- 51nod 1257 背包问题 V3(分数规划)
显然是分数规划...主要是不会求分数的形式,看了题解发现自己好傻逼QAQ 还是二分L值算出d[]降序选K个,顺便记录选择时候的p之和与w之和就可以输出分数形式了... #include<iost ...
- 1257 背包问题 V3(二分)
1257 背包问题 V3 3 秒 131,072 KB 80 分 5 级题 题意 : 从n个物品中选出k个,使单位体积价值最大 思路: 一开始正面想,试过很多种,排序什么的..总是结果不对,最后想到二 ...
- 1257 背包问题 V3——分数规划
N个物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi为整数),从中选出K件物品(K <= N),使得单位体积的价值最大. Input 第1 ...
- 51nod 1257 01分数规划/二分
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1257 1257 背包问题 V3 基准时间限制:3 秒 空间限制:1310 ...
- 51nod1257 背包问题 V3
分数规划经典.开始精度1e-3/1e-4都不行,1e-5就A了 #include<cstdio> #include<cstring> #include<cctype> ...
- 51nod——1086、1257背包问题V2(多重背包二进制拆分转01) V3(分数规划+二分贪心)
V3其实和dp关系不大,思想挂标题上了,丑陋的代码不想放了.
- 51Nod 最小公倍数之和V3
这题公式真tm难推……为了这题费了我一个草稿本…… woc……在51Nod上码LaTeX码了两个多小时…… 一开始码完了前半段,刚码完后半段突然被51Nod吃了,重新码完后半段之后前半段又被吃了,吓得 ...
- 51nod 1086 背包问题 V2
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1086 思路 裸的多重背包 巩固一下刚学的骚操作 #include< ...
随机推荐
- freemarker编辑器eclipse插件
freemarker编辑器eclipse插件 支持语法高亮,语法校验,代码提示的工具 freemarker IDE(JBoss): http://download.jboss.org/jbossto ...
- ASP.NET 状态的传递和保存
1,HTTP协议是无状态的.服务器不会记住上次给浏览器的处理结果,如果需要上次处理结果(上次状态)就需要浏览器把处理结果值(上次状态)再次给服务器. 2,URL传值:通过URL参数或者通过Form表单 ...
- php操作mysql总结
01 <?php02 $dbhost='localhost';03 $dbuser='root';04 $dbpass='123456';05 $dbname='pro ...
- FreeBSD修改root密码错误passwd: pam_chau(www.111cn.net)thtok(): error in service module from:http://www.111cn.net/sys/freebsd/66713.htm
在FreeBSD中修改帐号密码有时候会出现一些错误,针对passwd: pam_chauthtok(): error in service module这样的错误提示,简单整理了以下解决方案:错误提示 ...
- Java根据一个网址链接获取源代码
package test; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpU ...
- 20141128--JavaScript HTML DOM
通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素. HTML DOM 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). 每个 ...
- jQuery鼠标事件
鼠标事件是在用户移动鼠标光标或者使用任意鼠标键点击时触发的. (1):click事件:click事件于用户在元素敲击鼠标左键,并在相同元素上松开左键时触发. $('p').click ...
- java利用反射绕过私有检查机制实行对private、protected成员变量或方法的访问
在java中,如果类里面的变量是声明了private的,那么只能在被类中访问,外界不能调用,如果是protected类型的,只能在子类或本包中调用,俗话说没有不透风的墙.但是可以利用java中的反射从 ...
- Codevs 2898 卢斯的进位制
时间限制: 1 s 空间限制: 32000 KB 题目等级 : 青铜 Bronze 题目描述 Description 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母 ...
- linux 安装sysstat使用iostat、mpstat、sar、sa(转载)
使用yum安装 #yum install sysstat sysstat的安装包是:sysstat-5.0.5-1.i386.rpm,装完了sysstat-5.0.5-1.i386.rpm后 就会有i ...