【hoj】2608 assemble 二分法
来源:互联网 发布:c面向对象编程思想 编辑:程序博客网 时间:2024/05/20 11:35
/* 思路:本文要求找到满足预算的最好配置的组件,组装计算机,所以可以是按照*计算机的quantity以标准去查找相应的组件,就可以应用二分法,将每一种组件中的类型都按照质量排序*选择满足整体质量的要求的情况下的最低价格*/#include<iostream>#include<string>#include<string.h>#include<algorithm>#include<cstdio>#include<cstring>#define MAX 1010using namespace std;int budge;int num,m;struct compnent{ char type[25]; char name[25]; int quatity; int price;};struct compnent com[MAX];int kind[MAX];bool cmp( compnent a,compnent b){ return (strcmp(a.type,b.type) < 0)||((strcmp(a.type,b.type)==0) && (a.quatity < b.quatity));}bool judge(int mid){ int b = 0,min; for(int i = 0;i < m-1;i++){ min = 0x3f3f3f3f; for(int j = kind[i];j < kind[i+1];j++){ if(com[j].quatity >= mid){//在每一类中找到质量大于或者等于MID的型号,选择价格较低的 min = (com[j].price < min)?com[j].price:min; } } if(min == 0x3f3f3f3f)//如果为此值那么表示该类别中的质量都小于mid 因为min 是一个超大值 return false; b += min; cout<<min<<endl; } if(b <= budge)//低于预算,则这样的质量可以接受,试着查找更高质量的 return true; else//高出预算,不行找更低质量的 return false;}int main(){ int n,max,min; cin>>n; while(n--){ cin>>num>>budge; max = 0; min = 0x3f3f3f3f; for(int i = 0;i < num;i++){ cin>>com[i].type>>com[i].name>>com[i].price>>com[i].quatity;//通过质量大小查找所以先找到最大和最小的值 max = (com[i].quatity > max) ? com[i].quatity : max; min = (com[i].quatity < min) ? com[i].quatity : min; } sort(com,com+num,cmp);//将所有输入同一类的按照质量的大小排序 memset(kind,0,sizeof(kind)); m = 1; for(int i = 1;i < num;i++){//头为0不用再设置 if(strcmp(com[i].type,com[i-1].type))//找到每一类的起始位置也就是前一类的终止位置 kind[m++] = i; } kind[m++] = num;//用于界定第num-1号类型的数量 int high = max,low = min,mid,res = 0; //质量与价格不成正比,行吗? while(low <= high){//通过质量进行二分查找 mid = (low+high)/2; if(judge(mid)){ res = mid; low = mid+1; cout<<"res "<<res<<' '<<mid<<endl; } else{ high = mid-1; } } cout<<res<<endl; } return 0;}
0 0
- 【hoj】2608 assemble 二分法
- hoj 2608 Assemble
- HOJ 2608 Assemble(二分)
- Hoj 2608 Assemble
- uva 12124 Assemble(二分法->最小值最大化*)
- Assemble hoj 不错的二分题 稍有繁琐
- assemble
- Assemble
- Assemble
- HOJ
- 二分法~~
- 二分法
- 二分法
- 二分法
- 二分法
- 二分法
- 二分法
- 二分法
- gvim最常用的快捷键和命令
- Android应用程序窗口设计框架介绍
- gvim的安装,使用
- gvim安装
- <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 的说明
- 【hoj】2608 assemble 二分法
- php日期,时间,星期几
- PHP 字符串处理
- PHP 正则表达式语法
- php字符串截取
- php字符串分割
- 数组组合成字符串
- php数组:多维数组转成一维数组
- php处理二维数组(去除重复项,排…