UVALive 3971 组装电脑
2016-07-05 19:51
225 查看
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1972
http://7xjob4.com1.z0.glb.clouddn.com/df5832a56667ea3317ca9166994f1eb6
题意:给电脑配件,价格和性能,求在指定总价内配件的最低性能最大。
思路:用二分方法,找出性能,使这个性能以上的配件能在指定价格内买到,最小值最大问题。
View Code
http://7xjob4.com1.z0.glb.clouddn.com/df5832a56667ea3317ca9166994f1eb6
题意:给电脑配件,价格和性能,求在指定总价内配件的最低性能最大。
思路:用二分方法,找出性能,使这个性能以上的配件能在指定价格内买到,最小值最大问题。
#include <bits/stdc++.h> using namespace std; const int maxn=1000+5; int n,b,num; char typec[25],namec[25]; int price,quality; int fp[maxn][maxn],fq[maxn][maxn],m[maxn]; vector <string> tp; void trans() { int i,j,l; string s=typec; l=tp.size(); for(i=0;i<l;i++) { if(tp[i]==s) { m[i+1]++; fp[i+1][m[i+1]]=price; fq[i+1][m[i+1]]=quality; return; } } tp.push_back(s); m[l+1]++; fp[l+1][m[l+1]]=price; fq[l+1][m[l+1]]=quality; } int check(int qu) { int i,j,sum=0; for(i=1;i<=num;i++) { int mi=1000000005; for(j=1;j<=m[i];j++) { if(fq[i][j]>=qu && fp[i][j]<mi) mi=fp[i][j]; } if(mi==1000000005) return 0; sum+=mi; } if(sum<=b) return 1; else return 0; } int main() { int T; int i,j; scanf("%d",&T); while(T--) { scanf("%d %d",&n,&b); memset(m,0,sizeof(m)); tp.clear(); for(i=1;i<=n;i++) { scanf("%s %s %d %d",typec,namec,&price,&quality); trans(); } num=tp.size(); int l=0,r=1000000005; while(l+1<r) { int mid=(l+r)/2; if(check(mid)) { l=mid; } else { r=mid; } } printf("%d\n",l); } return 0; }
View Code
相关文章推荐
- Leetcode 118. Pascal's Triangle
- Palindrome Pairs
- MQTT(使用mosquitto做broker)做Android推送部分总结
- C++中引用和指针的区别
- 获得json数据
- 自动装箱与拆箱
- 栈和堆的区别
- php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
- Redux基础
- [bzoj1706] [usaco2007 Nov]relays 奶牛接力跑
- UVa11582 巨大的斐波那契数列
- 7月份 北京有关openstack的会议
- Linux网络编程
- 找寻下一波浪潮
- JavaWeb开发入门(一)
- Python 正则表达式练习
- php __set() __get() __isset() __unset()四个方法的应用
- Implement Queue using Stacks
- UML基础知识入门
- 在应用层通过spring特性解决数据库读写分离