SCUT校赛131:小P玩游戏II(贪心 & 思维)
来源:互联网 发布:python 数组减法 编辑:程序博客网 时间:2024/04/26 22:22
题目描述
小P最近迷上了一个游戏,但他在玩游戏的时候遇到了一个问题。
小P控制n 个角色,标号为1到n,小P有K个怪物可以分配给这n个角色击杀,一个怪物只能分配给一个角色,并且必须要分配给一个角色。
对于第 i(1≤i≤n)个角色,如果没有分配到一个怪物,那么它就会获得经验ci,如果分配到了t(t≥1)个怪物,那么它会获得经验ai+tbi。
小P要把K个怪物分配给这n个角色,问所有角色获得的经验总和最多是多少。
输入格式
输入第一行一个整数T,表示有T组数据。
对于每组数据,第一行两个正整数n和K。
接下来n行,每行三个整数ai,bi,ci。
1≤T≤50
1≤n,K≤100000
1≤ai,bi,ci≤100000
输出格式
对于每组数据,输出一个整数表示答案。
样例数据
输入
22 24 1 11 3 32 24 1 11 3 4
输出
910
备注
# include <bits/stdc++.h># define ll long longusing namespace std;const int maxn = 1e5;struct node{ int a, b, c, d;}m[maxn+3];bool cmp(node x, node y){ return x.d > y.d;}ll sum[maxn+3];int main(){ int t, n, k; scanf("%d",&t); while(t--) { ll tot = 0; scanf("%d%d",&n,&k); for(int i=1; i<=n; ++i) { scanf("%d%d%d",&m[i].a, &m[i].b, &m[i].c); m[i].d = m[i].a + m[i].b - m[i].c; } sort(m+1, m+1+n, cmp); for(int i=1; i<=n; ++i) tot += m[i].c, sum[i] = sum[i-1] + m[i].d; ll ans = 0; for(int i=1; i<=n; ++i) { int l = 1, r = min(n,k-1);//k-1为上限是因为有一个怪已经分配给i了。 while(l<=r) { int mid = l+r>>1; if(m[mid].d > m[i].b) l = mid+1; else r = mid-1; } if(r < i) ans = max(ans, (ll)tot + sum[r] + m[i].d + (ll)(k-r-1)*m[i].b); else ans = max(ans, (ll)tot + sum[r] + (ll)(k-r)*m[i].b);//这里比较巧妙,当r==k-1时这样处理貌似有bug,因为最佳可能是每个人分一个怪,但这里剩下的一个怪强制分给i了,然而枚举到最后一个人时又正确了。 } printf("%lld\n",ans); } return 0;}
0 0
- SCUT校赛131:小P玩游戏II(贪心 & 思维)
- SCUT校赛130:对抗女巫的魔法碎片(思维)
- SCUT Training 20170913 Problem P
- SCUT Training 20170920 Problem P
- SCUT校赛129:笔芯值(数学)
- Equal (贪心,思维)
- 通过小宝的卡牌游戏,看开源SCUT服务器运行使用
- Scut游戏服务器引擎搭建
- Scut
- ZZULIOJ【2173】GJJ的日常之玩游戏【思维】
- 51nod 1390 游戏得分【贪心+思维+谨慎】
- Scut游戏服务器引擎之Unity3d接入
- Scut游戏服务器引擎之新手入门
- Scut游戏服务端免费开源引擎
- Scut开源游戏服务器引擎
- Scut游戏服务器引擎之Unity3d接入
- 贪心 (游戏杆)
- 删除游戏(贪心)
- Nginx配置基础-正则表达式
- word2vec 模型思想和代码实现
- Python yield 使用浅析
- 设计模式讲解与代码实践(一)——抽象工厂
- 怎样做情感分析
- SCUT校赛131:小P玩游戏II(贪心 & 思维)
- Picasso源码原理分析
- 用深度神经网络处理NER命名实体识别问题
- 配置tomcat
- RabbltMq消息中心_常用命令
- 使用泛型和反射 创建通用的数据库查询方法
- 用 RNN 训练语言模型生成文本
- RNN与机器翻译
- hibernate使用注解简化开发