题目连接:3971 - Assemble

题目大意:有若干个零件, 每个零件给出的信息有种类, 名称, 价格, 质量,  现在给出一个金额, 要求在这个金额范围内, 将每个种类零件都买一个, 并且尽量让这些零件中质量最小的越大, 输出质量最小的值。

解题思路:首先可以用二分搜索确定质量, 然后在搜索的过程中要判断这个质量是否能被满足, 判断函数可以用贪心, 在每一类的零件中选择价格最低且质量大于等于当前质量的零件。(事先按照价格大小排序)。

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = 1005;
const int M = 25; struct State {
char name[M];
int money;
int wei;
}s[N][N];
int cnt, sum, son[N];
char str[N][M], sex[M]; bool cmp(const State& a, const State& b) {
return a.money < b.money;
} int find(char sex[]) {
for (int i = 0; i < cnt; i++)
if(strcmp(sex, str[i]) == 0)
return i;
strcpy(str[cnt], sex);
return cnt;
} bool judge(int Min) {
int tmp = 0;
for (int i = 0; i < cnt; i++) {
int flag = 1;
for (int j = 0; j < son[i]; j++) {
if (s[i][j].wei >= Min) {
flag = 0;
tmp += s[i][j].money;
break;
}
}
if (flag || tmp > sum) return false;
}
return true;
} int main() {
State now;
int cas, n, cur, L, R;
scanf("%d", &cas);
while (cas--) {
memset(s, 0, sizeof(s));
memset(son, 0, sizeof(son));
memset(str, 0, sizeof(str));
cnt = L = R = 0; scanf("%d%d", &n, &sum);
for (int i = 0; i < n; i++) {
scanf("%s%s%d%d", sex, now.name, &now.money, &now.wei);
if (now.wei > R) R = now.wei;
cur = find(sex);
s[cur][son[cur]++] = now;
if (cur == cnt) cnt++;
} for (int i = 0; i < cnt; i++)
sort(s[i], s[i] + son[i], cmp); int mid;
while (L < R) {
mid = (L + R) / 2;
if (L == mid) break;
if (judge(mid))
L = mid;
else
R = mid;
}
if (judge(mid + 1)) mid++;
printf("%d\n", mid);
}
return 0;
}

最新文章

  1. Navicat软件中mysql中int、bigint、smallint和tinyint的区别、布尔类型存储以及乱码问题的解决
  2. MyBK
  3. jenkins, ant, pmd持续集成
  4. 记一次【求n以内的素数个数】的优化记录
  5. python 进程间共享数据 (三)
  6. SIFT 特征提取算法总结
  7. EF CRUD 操作
  8. WPF ICommand 用法
  9. 返回某个界面——nav
  10. 【额 原来ms sqlserver 中的视图果然是“虚表”哈】
  11. And Then There Was One(约瑟夫问题变形)
  12. 使用TransactionScope(轻量级事务)实现数据库操作事务
  13. Oracle Applications DBA 基础(一)
  14. 将本地代码备份到Github public repository
  15. 分布式监控系统Zabbix3.4-针对MongoDB性能监控操作笔记
  16. ajax多级菜单栏
  17. Neural Networks and Deep Learning(week4)Deep Neural Network - Application(图像分类)
  18. 给网卡设备添加两个IP别名(一个网卡绑定多个ip)
  19. Nginx搭建正向代理服务器
  20. MVC的JavaScriptResult使用

热门文章

  1. [HDU 4741]Save Labman No.004[计算几何][精度]
  2. 飘逸的python - 有的升序有的降序的情况下怎么多条件排序
  3. 【技术引擎——汇聚IT思想之间的碰撞】
  4. 如何:打开 IIS 管理器
  5. 深入解读JavaScript面向对象编程实践
  6. UITextView 限制输入字数
  7. If We Were a Child Again
  8. Hadoop MR Job 关于如何控制Map Task 数量
  9. Java &quot;==和equals区别&quot;
  10. 关于JVM的GC机制