C. Fountains
\(整体思路没错,但是我貌似太麻烦了.......\)
\(分情况讨论\)
\(Ⅰ.coin和diamond各选一个物品,这个简单\)
\(Ⅱ.在coin中选两个或者在diamond选两个\)
\(开始我想着枚举一个物品找另一个物品肯定超时\)
\(那我们可以直接预处理sumn[i]表示花费i时的最大收益,但是这样做可能这个最大收益就是枚举物品本身(重复了)\)
\(\color{Red}{至此有三种解决方案}\)
\(Ⅰ.\)
\(那我们额外记录sumn[i]时选的物品是谁,假如就是枚举的物品本身我们再对这个物品单独求解\)
\(Ⅱ.\)
\(开二维数组sumn[i][2]同时把次大值也装进去,如果余额大于等于枚举的商品且sumn[rest][0]==枚举商品价值\)
\(那么我们就取次小值,因为此时sumn[rest][0]装的值是枚举商品\)
\(Ⅲ.\)
#include <bits/stdc++.h>
using namespace std;
const int maxn=100009;
struct p{
int v,w;
}a[maxn],b[maxn];
int cnt1,cnt2;
int vis1[100009],vis2[100009];//储存物品花费i时美感最大值
int sumn1[100009],sumn2[100009],ans;
int num1[maxn],num2[maxn],vnum1[maxn],vnum2[maxn];
int main()
{
int n,m1,m2;
cin>>n>>m1>>m2;
for(int i=1;i<=n;i++)
{
int l,r;char s;
cin>>l>>r>>s;
if(s=='C')
{
if(vis1[r]<l) vnum1[r]=cnt1+1;
a[++cnt1].v=l,a[cnt1].w=r,vis1[r]=max(vis1[r],l);
}
else
{
if(vis2[r]<l) vnum2[r]=cnt2+1;
b[++cnt2].v=l,b[cnt2].w=r,vis2[r]=max(vis2[r],l);
}
}
int maxn1=-1,maxn2=-1;
for(int i=1;i<=100000;i++)
{
if(sumn1[i-1]<vis1[i]) num1[i]=vnum1[i];
else num1[i]=num1[i-1];
if(sumn2[i-1]<vis2[i]) num2[i]=vnum2[i];
else num2[i]=num2[i-1];
sumn1[i]=max(sumn1[i-1],vis1[i]);
sumn2[i]=max(sumn2[i-1],vis2[i]);
}
for(int i=1;i<=cnt1;i++)
if(a[i].w<=m1)
{
maxn1=max(maxn1,a[i].v);//买得起
if(num1[m1-a[i].w]==i)//可能存在相等(选自己)
{
int temp=-1;
for(int j=1;j<=cnt1;j++)
if(i!=j&&a[j].w<=m1-a[i].w)
temp=max(temp,a[j].v);
if(temp==-1) continue;
ans=max(ans,temp+a[i].v);
}
else if(sumn1[m1-a[i].w]!=0)
ans=max(ans,a[i].v+sumn1[m1-a[i].w]);
}
for(int i=1;i<=cnt2;i++)
if(b[i].w<=m2)
{
maxn2=max(maxn2,b[i].v);
if(num2[m2-b[i].w]==i)
{
int temp=-1;
for(int j=1;j<=cnt2;j++)
if(i!=j&&b[j].w<=m2-b[i].w)
temp=max(temp,b[j].v);
if(temp==-1) continue;
ans=max(ans,temp+b[i].v);
}
else if(sumn2[m2-b[i].w]!=0)
ans=max(ans,b[i].v+sumn2[m2-b[i].w]);
}
if(maxn1!=-1&&maxn2!=-1) ans=max(ans,maxn1+maxn2);
cout<<ans;
}
C. Fountains的更多相关文章
- Fountains(非线段树版(主要是不太会用))
Arkady plays Gardenscapes a lot. Arkady wants to build two new fountains. There are n available foun ...
- Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) C. Fountains 【树状数组维护区间最大值】
题目传送门:http://codeforces.com/contest/799/problem/C C. Fountains time limit per test 2 seconds memory ...
- codeforces 799C Fountains
C. Fountains time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- 树状数组 Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) C. Fountains
C. Fountains time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- codeforces 799 C. Fountains(二分+思维)
题目链接:http://codeforces.com/contest/799/problem/C 题意:要求造2座fountains,可以用钻石,也可以用硬币来造,但是能用的钻石有限,硬币也有限,问能 ...
- CodeForce-799C Fountains (记忆化DP)
Fountains CodeForces - 799C 某土豪想要造两座喷泉.现在有 n 个造喷泉的方案,我们已知每个方案的价格以及美观度.有两种合法的货币:金币和钻石.这两种货币之间不能以任何方式转 ...
- Codeforces Round #413, rated, Div. 1 + Div. 2 C. Fountains(贪心 or 树状数组)
http://codeforces.com/contest/799/problem/C 题意: 有n做花园,有人有c个硬币,d个钻石 (2 ≤ n ≤ 100 000, 0 ≤ c, d ≤ 100 ...
- C.Fountains(Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2)+线段树+RMQ)
题目链接:http://codeforces.com/contest/799/problem/C 题目: 题意: 给你n种喷泉的价格和漂亮值,这n种喷泉题目指定用钻石或现金支付(分别用D和C表示),C ...
- 【预处理】【分类讨论】Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) C. Fountains
分几种情况讨论: (1)仅用C或D买两个 ①买两个代价相同的(实际不同)(排个序) ②买两个代价不同的(因为买两个代价相同的情况已经考虑过了,所以此时对于同一个代价,只需要保存美丽度最高的喷泉即可)( ...
- [#413c] Fountains
http://codeforces.com/contest/799/problem/C 解题关键:树状数组取最大值,注意先搜索,后加入,此种情况可以取出最大值. 为什么可以取到最大值? 1.当分别用两 ...
随机推荐
- centos7 NAT链接配置(静态ip/修改网卡名为eth0)|1
NAT的静态ip设置并且修改网卡名为eth0 1 cd /etc/sysconfig/network-scripts/ mv eno16777736 ifcfg-eth0 #修改名称 vi eth0 ...
- 拓扑排序入门详解&&Educational Codeforces Round 72 (Rated for Div. 2)-----D
https://codeforces.com/contest/1217 D:给定一个有向图,给图染色,使图中的环不只由一种颜色构成,输出每一条边的颜色 不成环的边全部用1染色 ps:最后输出需要注意, ...
- AJ学IOS(28)UI之Quartz2D简单介绍
AJ分享,必须精品 iOS开发UI篇—Quartz2D简单介绍 什么是Quartz2D Quartz 2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : ...
- Delphi 文件操作(4)Reset
procedure Reset(var F [: File; RecSize: Word ] ); { 作用: 对于文本文件,Reset过程将以只读方式打开文件,对于类型文件和无类型文件, ...
- 初识phar反序列化&&复现bytectf_2019_easycms&&RSS思路
概要 来自Secarma的安全研究员Sam Thomas发现了一种新的漏洞利用方式,可以在不使用php函数unserialize()的前提下,引起严重的php对象注入漏洞.这个新的攻击方式被他公开在了 ...
- DES加密解密算法C++实现
DES加密算法并不难,是由一些简单的变换得来的,难的是要有足够的耐心.蒟蒻并不想说自己用了多久才把代码写好的. 代码: 我真的太难了QAQ #include<iostream> using ...
- Unity 游戏框架搭建 2019 (三十六~三十八) partial与public
在上一篇,我们把菜单的顺序从头到尾整理了一遍.在整理菜单顺序的过程中,记录了一个要做的事情. 要做的事情: (完成) 备份:导出文件,并取一个合理的名字. 整理完菜单顺序后,学习新的知识,解决随着示例 ...
- python机器学习的常用算法
Python机器学习 学习意味着通过学习或经验获得知识或技能.基于此,我们可以定义机器学习(ML)如下 - 它可以被定义为计算机科学领域,更具体地说是人工智能的应用,其为计算机系统提供了学习数据和从经 ...
- 调用ocx ActiveX控件详解(做一个简单的ocx控件)
背景 最近做的项目都和插件有关,就是在页面中调用插件的方法,然后进行操作. 插件就是ocx ActiveX控件,具体的说明可以自己去了解一下,在这里就不做赘述. 具体调用方式很简单: 1.在页面中写一 ...
- 给动态ajax添加的元素添加click事件
$(document).on('click','div',function(){alert(1)}); .live()方法也是可以的