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

\(分情况讨论\)

\(Ⅰ.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. Kubectl patch命令使用

    kubectl patch 使用(patch)补丁修改.更新资源的字段. 支持JSON和YAML格式. 请参阅https://htmlpreview.github.io/?https://github ...

  2. bfs和dfs辨析—基础复习(从stack和queue的角度来理解区别,加深理解,不再模糊)

    参考: https://www.cnblogs.com/Tovi/articles/6194815.html https://blog.csdn.net/dangzhangjing97/article ...

  3. 使用snapjs实现svg路径描边动画

    一,snap.svg插件在近几天,突然接到一个需求,内容是要在网页上写一个路径的动画,还需要可以随意控制动画的速度,开始于结束,本来是一个图片可以解决的问题,结果就这样变难了呀,在网上查一会之后,突然 ...

  4. tortoise 设置beyond Compare比较工具

    1.桌面右击tortoiseSVN->setting->Diff Viewer面板,选择external,选中beyond Compare路径

  5. 微服务统计,分析,图表,监控, 分布式追踪一体化的 HttpReports 在 .Net Core 的应用

    前言介绍 HttpReports 是针对.Net Core 开发的轻量级APM系统,基于MIT开源协议, 使用HttpReports可以快速搭建.Net Core环境下统计,分析,图表,监控,分布式追 ...

  6. 【题解】P3959 宝藏 - 状压dp / dfs剪枝

    P3959 宝藏 题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的m  条道路和它们的长度. 小明决心亲自前往挖掘所有宝 ...

  7. java第八周课后作业

    1.系统小练习 package homework; import java.util.Random; import java.util.Scanner; public class Menu { pub ...

  8. Spring Cloud+nacos+Feign,实现注册中心及配置中心

    写在前面 注册中心.配置中心的概念就不在这里解释了.发现服务原来一直用的是Eureka,因为这家伙闭源了,不爽.然后就发现了nacos,阿里巴巴的,好东西,一个搞定注册中心和配置中心.官网:https ...

  9. 域名和服务器绑定及https协议更换

    服务器是之前已经购买了的 1.腾讯云产品中搜索域名注册(产品太多了懒得找,直接搜索来得快些) 2.进去之后可以选择各种后缀的域名,输入自己喜欢的,看看哪些后缀是没有被注册的.自己挑选一个就可以,按照指 ...

  10. 重大更新!Druid 0.18.0 发布—Join登场,支持Java11

    Apache Druid本质就是一个分布式支持实时数据分析的数据存储系统. 能够快速的实现查询与数据分析,高可用,高扩展能力. 距离上一次更新刚过了二十多天,距离0.17版本刚过了三个多月,Druid ...