博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 12124 UVAlive 3971 Assemble(二分 + 贪心)
阅读量:7048 次
发布时间:2019-06-28

本文共 1192 字,大约阅读时间需要 3 分钟。

先从中找出性能最好的那个数,

在用钱比較少的去组合,能组出来就表明答案在mid的右边,反之在左边,

#include<string.h>

#include<map>
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
map<string,int> vic;//以字符映射数字
int end,start;
int num;
int m,n;
int sba,sbb;
char name[1000];
int pnum[1005];
struct node{
int v,q;
}p[1005][1005];
bool cmp(node a,node b)
{
return a.v<b.v;
}
int judge(int mid)
{
int sum=0,i,j;
for(i=1;i<num;i++)
{
for(j=0;j<pnum[i];j++)
{
if(p[i][j].q>=mid&&sum+p[i][j].v<m)
{
sum+=p[i][j].v;
break;
}
}
if(j==pnum[i])//质量高了
return 0;
}
return 1;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
vic.clear();//映射
scanf("%d %d\n",&n,&m);
memset(pnum,0,sizeof(pnum));
end=0;
start=0;
num=1;
for(int i=0;i<n;i++)
{
    scanf("%s%*s%d%d",name,&sba,&sbb);
if(end<sbb)
end=sbb;
if(!vic[name])
{
vic[name]=num++;
p[vic[name]][pnum[vic[name]]].v=sba;
p[vic[name]][pnum[vic[name]]++].q=sbb;
}
else
{
p[vic[name]][pnum[vic[name]]].v=sba;
p[vic[name]][pnum[vic[name]]++].q=sbb;
}
}
for(int i=0;i<num;i++)
sort(p[i],p[i]+pnum[i],cmp);
int mid;
while(start<end)
{
mid=(end+start)>>1;
if(judge(mid))
{
    if (start == mid)
                  break;
start=mid;
}
else
end=mid;
}
if(judge(mid+1))
mid++;
printf("%d\n",mid);
}
return 0;
}

转载地址:http://hldol.baihongyu.com/

你可能感兴趣的文章
简述原型链是什么,有什么用处?若想访问一个对象的原型,应该使用什么方法?...
查看>>
[LeetCode] 675. Cut Off Trees for Golf Event
查看>>
SQLServer之锁简介
查看>>
从点餐小程序说起,谈谈如何从0到1设计一款toB类产品
查看>>
CSS相对定位和绝对定位
查看>>
断开TCP连接
查看>>
我的前端集成测试(一)- 认识node的assert模块
查看>>
【跃迁之路】【465天】程序员高效学习方法论探索系列(实验阶段222-2018.05.16)...
查看>>
spring4.x 集成quartz2.x 集群化配置项目实例
查看>>
Spring Boot 参考指南(开发者工具)
查看>>
慢雾科技和 SegmentFault 达成战略合作
查看>>
TypeScript 2.9
查看>>
Linux 程序包的管理
查看>>
JavaScript 异步、栈、事件循环、任务队列
查看>>
图解 React Virtual DOM
查看>>
Day08 - HTML5 Canvas 实现彩虹画笔绘画板指南
查看>>
Netty防止内存泄漏措施
查看>>
Spring Boot [组件学习-Spring Data JPA]
查看>>
百度云磁盘CDS、对象存储BOS技术深度解析
查看>>
独家!阿里开源自用OpenJDK版本,Java社区迎来中国力量
查看>>