hiho 1571 - 贪心好题*
小Hi在帮助钢铁侠开发新的盔甲。这套新盔甲一共包含M种武器插槽,其中第i种插槽有Ci个。每个插槽最多安装一个武器模块。
小Hi一共准备了N个武器模块,编号1~N。每个武器模块都有三个参数Vi, Pi和Ti。其中Vi描述了第i个模块的威力,Pi描述了该模块可以安装在哪种插槽中,Ti描述了该模块是否需要JARVIS的支持(1代表需要JARVIS支持,0代表不需要JARVIS支持)。
由于JARVIS的运算能力有限,它最多能同时支持K个武器模块。
现在小Hi想知道,如何装备武器模块才能使总威力最大,同时需要JARVIS支持的模块不超过K个。
输入
输入第一行包含一个整数T,代表测试数据的组数。
对于每组测试数据:
第一行包含三个整数N,M和K。
以下N行每行包含三个整数Vi, Pi和Ti。
最后一行包含M个整数,C1, C2, ... CM。
对于30%的数据, T <= 20, N <= 100, M <= 10, K <= 100
对于另70%的数据, T <= 2, 1 <= N <= 105, 1 <= M <= 104, 0 <= K <= 105
对于100%的数据, 1 <= Vi <= 100, 1 <= Pi <= M, 0 <= Ti <= 1, 0 <= Ci <= 100
输出
输出最大的总威力。
-------------------------------------------------------------------------------------------------------
开始想的是分组背包,没有考虑到这样做的话复杂度是10w*10w肯定超时。。
贪心,对于某类物体,首先计算不用javis的最大威力,然后计算他付出1个javis的最大、次大……收益是多少。
收益的计算是个“y”的形状。“y”中的“/”是不需要javis的前Ci个的升序排列,"y"中的"\"是需要javis的降序排列。收益就是"y"中的">"。
对所有的这些收益排个序,累加前k大的收益就好了
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 10100; //m个物体
vector<int> weapons[N][2];
int incomes[N*10],income_cnt;
bool cmp(int a,int b){return a>b;}
int main(){
int t,tmpv,tmpp,tmpt,lim; for(cin>>t;t--;){
int n,m,K; cin>>n>>m>>K;
for(int i=0;i<m;i++) {
weapons[i][0].clear();
weapons[i][1].clear();
}
for(int i=0;i<n;i++) {
scanf("%d%d%d",&tmpv,&tmpp,&tmpt);
weapons[tmpp-1][tmpt].push_back(tmpv);
} income_cnt = 0;
long long ans = 0;
for(int i=0;i<m;i++){
scanf("%d",&lim);
if(lim>0){
while(weapons[i][0].size()<lim) weapons[i][0].push_back(0);
std::sort(weapons[i][0].begin(),weapons[i][0].end(),cmp);
std::sort(weapons[i][1].begin(),weapons[i][1].end(),cmp);
for(int j=0;j<lim;j++) ans+=weapons[i][0][j];
for(int j=lim-1;j>=0;j--){
int k = lim-j-1; if(k>=weapons[i][1].size()) break;
int income = weapons[i][1][k]-weapons[i][0][j];
if(income<=0) break;
incomes[income_cnt++] = income;
}
}
}
std::sort(incomes,incomes+income_cnt,cmp); lim = std::min(income_cnt,K);
for(int i=0;i<lim;i++) ans+=incomes[i];
printf("%lld\n",ans);
}
return 0;
}
hiho 1571 - 贪心好题*的更多相关文章
- 贪心/思维题 Codeforces Round #310 (Div. 2) C. Case of Matryoshkas
题目传送门 /* 题意:套娃娃,可以套一个单独的娃娃,或者把最后面的娃娃取出,最后使得0-1-2-...-(n-1),问最少要几步 贪心/思维题:娃娃的状态:取出+套上(2),套上(1), 已套上(0 ...
- 贪心/思维题 UVA 11292 The Dragon of Loowater
题目传送门 /* 题意:n个头,m个士兵,问能否砍掉n个头 贪心/思维题:两个数组升序排序,用最弱的士兵砍掉当前的头 */ #include <cstdio> #include <c ...
- 【每日一题】UVA - 1368 DNA Consensus String 字符串+贪心+阅读题
https://cn.vjudge.net/problem/UVA-1368 二维的hamming距离算法: For binary strings a and b the Hamming distan ...
- LightOJ 1166 Old Sorting 置换群 或 贪心 水题
LINK 题意:给出1~n数字的排列,求变为递增有序的最小交换次数 思路:水题.数据给的很小怎么搞都可以.由于坐标和数字都是1~n,所以我使用置换群求循环节个数和长度的方法. /** @Date : ...
- DP+贪心水题合集_C++
本文含有原创题,涉及版权利益问题,严禁转载,违者追究法律责任 本次是最后一篇免费的考试题解,以后的考试题目以及题解将会以付费的方式阅读,题目质量可以拿本次作为参考 本来半个月前就已经搞得差不多了,然后 ...
- POJ:3040-Allowance(贪心好题)
Allowance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4903 Accepted: 1943 Description ...
- 【贪心 思维题】[USACO13MAR]扑克牌型Poker Hands
看似区间数据结构的一道题 题目描述 Bessie and her friends are playing a unique version of poker involving a deck with ...
- 「面试高频」二叉搜索树&双指针&贪心 算法题指北
本文将覆盖 「字符串处理」 + 「动态规划」 方面的面试算法题,文中我将给出: 面试中的题目 解题的思路 特定问题的技巧和注意事项 考察的知识点及其概念 详细的代码和解析 开始之前,我们先看下会有哪些 ...
- 洛谷P5019 铺设道路 题解 模拟/贪心基础题
题目链接:https://www.luogu.org/problemnew/show/P5019 这道题目是一道模拟题,但是它有一点贪心的思想. 我们假设当前最大的深度是 \(d\) ,那么我们需要把 ...
随机推荐
- marge into操作
动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存在记录 ...
- appium连接夜游神的方法
很多小伙伴想连接夜游神模拟器,但是无法连接,下面是夜游神的链接方法 第一步:先打开夜游神模拟器 第二步:打开运行输入cmd,输入夜游神连接方法:adb connect 127.0.0.1:62001第 ...
- Error:Execution failed for task ':app:processDebugManifest'. 合并冲突
1. Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed : Attrib ...
- 读书笔记之《HTML5 与 CSS3 基础教程》
1· 读前预期 考虑到对于 Web 开发零基础,凡涉足一件未知的任务,最好先理清任务的逻辑结构,然后有目的地逐步学习.为实现我们的需求和设计,必须要学习前端.后端.服务器等一系列暂时陌生的知识,在此, ...
- 打包phar文件过大的问题。
根据一个开源工具得到的灵感,使用流打包,并使用token_get_all移除了所用PHP文件的空白.现在打包出来只有93k了.谢谢关注. 我一个简单的文件,加上一个symfony的process包,打 ...
- Failed reading log event, reconnecting to retry
数据库版本:5.6.16 系统:CentOS 6.5 搭建数据库从库报错:160411 14:30:39 [Note] Slave I/O thread: Failed reading log eve ...
- C#中方向键与回车键切换控件焦点
环境:界面上有TextBox,ComboBox等控件. 不建议把左右方向键都用来切换焦点,否则你在TextBox里面改变光标所在字符位置就不方便了. 方法一:笨方法,需为每个控件单独注册事件处理 以T ...
- CF739E Gosha is hunting(费用流,期望)
根据期望的线性性答案就是捕捉每一只精灵的概率之和. 捕捉一只精灵的方案如下: 1.使用一个\(A\)精灵球,贡献为\(A[i]\) 2.使用一个\(B\)精灵球,贡献为\(B[i]\) 3.使用一个\ ...
- 挖一挖python中的深浅拷贝问题
前几天在做面试题的时候,遇到一个与Python深浅拷贝的问题,今天总结出来一个方法,能够快速判断在对一个对象复制后,新对象与原来对象是否会互相影响的方法. 先抛出结论,然后我们对结论进行验证~~~ 先 ...
- 紫书 例题8-3 UVa 1152(中途相遇法)
这道题要逆向思维, 就是求出答案的一部分, 然后反过去去寻找答案存不存在. 其实很多其他题都用了这道题目的方法, 自己以前都没有发现, 这道题专门考这个方法.这个方法可以没有一直往下求, 可以省去很多 ...