\(整体思路没错,但是我貌似太麻烦了.......\)

\(分情况讨论\)

\(Ⅰ.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的更多相关文章

  1. Fountains(非线段树版(主要是不太会用))

    Arkady plays Gardenscapes a lot. Arkady wants to build two new fountains. There are n available foun ...

  2. 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 ...

  3. codeforces 799C Fountains

    C. Fountains time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  4. 树状数组 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 ...

  5. codeforces 799 C. Fountains(二分+思维)

    题目链接:http://codeforces.com/contest/799/problem/C 题意:要求造2座fountains,可以用钻石,也可以用硬币来造,但是能用的钻石有限,硬币也有限,问能 ...

  6. CodeForce-799C Fountains (记忆化DP)

    Fountains CodeForces - 799C 某土豪想要造两座喷泉.现在有 n 个造喷泉的方案,我们已知每个方案的价格以及美观度.有两种合法的货币:金币和钻石.这两种货币之间不能以任何方式转 ...

  7. 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  ...

  8. 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 ...

  9. 【预处理】【分类讨论】Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) C. Fountains

    分几种情况讨论: (1)仅用C或D买两个 ①买两个代价相同的(实际不同)(排个序) ②买两个代价不同的(因为买两个代价相同的情况已经考虑过了,所以此时对于同一个代价,只需要保存美丽度最高的喷泉即可)( ...

  10. [#413c] Fountains

    http://codeforces.com/contest/799/problem/C 解题关键:树状数组取最大值,注意先搜索,后加入,此种情况可以取出最大值. 为什么可以取到最大值? 1.当分别用两 ...

随机推荐

  1. HBase协处理器加载的三种方式

    本文主要给大家罗列了HBase协处理器加载的三种方式:Shell加载(动态).Api加载(动态).配置文件加载(静态).其中静态加载方式需要重启HBase. 我们假设我们已经有一个现成的需要加载的协处 ...

  2. Mac 窗口管理软件 Spectacle

    我个人使用的窗口管理软件是 Magnet(本人在 Mac 下付费的首款软件,记得是 6 元~),今天为大家介绍一款类似的开源软件. 简介 Spectacle 是一款可以快速调整窗口大小与位置的开源软件 ...

  3. 小说光看还不够?用Python做有声小说!

    文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http:// ...

  4. JavaScript基础笔记1220

    JavaScript笔记1.JavaScript关键词2.JavaScript标识符 必须以字母,下划线(_)或美元符($)开始. 后续的字符可以是字母.数字.下划线或者美元符 (数字是不允许作为首字 ...

  5. 2020-MRCTF

    ez_bypass I put something in F12 for you include 'flag.php'; $flag='MRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx} ...

  6. [PHP]$_SERVER参数详情

    来源:PHP中$_SERVER的详细参数与说明 $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关.$_SERVER['argv'] #传递给该脚 ...

  7. UnicodeDecodeError: 'gbk' codec can't decode byte 0x8a in position 2: illegal multibyte sequence

    pycharm报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x8a in position 2: illegal multibyte seq ...

  8. Centos8安装docker-compose

    一.首先检查是否有pip 执行命令:piv -V 二.更新pip 执行命令:pip install --upgrade pip 三.下载  setuptools 执行命令 :pip install - ...

  9. koa+mysql实现增删改查-全栈之路(001)

    Date: 2020-4-23 以前很少写文章,从今天开始我要挑战一下自己,连续输出100篇技术类文章.这100篇文章我尽量以实战案例为主. 如果你觉得本文还不错,记得关注或者给个 star,你们的赞 ...

  10. opencv-8-图像核与蒙板操作

    opencv-8-图像核与蒙板操作 opencvc++qt 开始之前 在准备开始的时候, 我大概列了一个opencv 章节列表, 按照章节进行写, 写到某些部分的时候再具体调整章节内容, 完成了之后, ...