799C(xjb)
题目链接: http://codeforces.com/problemset/problem/799/C
题意: 有c, d两种货币, 有 n 个货物, 可以用 c 货币或者 d 货币购买, 现在需要买两件货物, 问购买的货物的美丽值最大可为多少.
思路: 只买两件货物, 那么总共有 3 总可能, 买一件 c 一件 d, 买两件 c 或者买两件 d . 取他们的最大值即可.
可以给 c 货物和 d 货物按 p 升序排列, 那么对于买一件 c 一件 d 的情况, 只需要遍历一下 c 货物 和 d 货物, 分别取能买到的最大 b 值即可.
对于买两件 c 的情况, 用 vis[k] 存储当前 k 个 c 货币最大可买到的 b 值. 那么可以遍历c 货物的同时更新 vis 数组, 即对于当前 i , vis[k] 存储 [0, i) 中 k 可以买到的最大价值.
那么对于每一个 i , 匹配一下 vis[c - gel_c[i].p] 即可, 然后维护一下 gel_c[i].b + vis[c - gel_c[i].p] 的最大值即可.
对于选两件 d 的情况, 和选两个 c 的情况处理方法相同.
代码:
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std; const int MAXN = 1e5 + ;
struct node{
int b, p;
}gel_c[MAXN], gel_d[MAXN]; int vis[MAXN], tag[MAXN]; bool cmp(node x, node y){
return x.p < y.p;
} int main(void){
char op[];
int n, c, d, indx_c = , indx_d = , ans = ; scanf("%d%d%d", &n, &c, &d);
for(int i = ; i < n; i++){
int b, p;
scanf("%d%d%s", &b, &p, op);
if(op[] == 'C'){
gel_c[indx_c].b = b;
gel_c[indx_c++].p = p;
}else{
gel_d[indx_d].b = b;
gel_d[indx_d++].p = p;
}
} sort(gel_c, gel_c + indx_c, cmp);
sort(gel_d, gel_d + indx_d, cmp); int cnt1 = , cnt2 = , pos = ;
for(int i = ; i < indx_c; i++){
if(gel_c[i].p > c) break;
cnt1 = max(cnt1, gel_c[i].b);
}
for(int i = ; i < indx_d; i++){
if(gel_d[i].p > d) break;
cnt2 = max(cnt2, gel_d[i].b);
}
if(cnt1 && cnt2) ans = cnt1 + cnt2; cnt1 = cnt2 = ;
for(int i = ; i < indx_c; i++){
int gg = c - gel_c[i].p;
if(gg <= ) break;
int cc = upper_bound(tag, tag + pos, gg) - tag;
if(cc == && i != ) break;
cc = tag[cc - ];
if(vis[cc]) ans = max(ans, gel_c[i].b + vis[cc]);
vis[gel_c[i].p] = max(cnt1, gel_c[i].b);
tag[pos++] = gel_c[i].p;
cnt1 = max(cnt1, gel_c[i].b);
} pos = ;
for(int i = ; i < indx_d; i++){
int gg = d - gel_d[i].p;
if(gg <= ) break;
int cc = upper_bound(tag, tag + pos, gg) - tag;
if(cc == && i != ) break;
cc = tag[cc - ];
if(vis[cc]) ans = max(ans, gel_d[i].b + vis[cc]);
vis[gel_d[i].p] = max(cnt2, gel_d[i].b);
tag[pos++] = gel_d[i].p;
cnt2 = max(cnt2, gel_d[i].b);
}
printf("%d\n", ans);
return ;
}
799C(xjb)的更多相关文章
- 程设大作业xjb写——魔方复原
鸽了那么久总算期中过[爆]去[炸]了...该是时候写写大作业了 [总不能丢给他们不会写的来做吧 一.三阶魔方的几个基本定义 ↑就像这样,可以定义面的称呼:上U下D左L右R前F后B UD之间的叫E,LR ...
- hdu_5881_Tea(xjb猜)
题目链接:hdu_5881_Tea 题意: 有一壶水, 体积在 L 和 R 之间, 有两个杯子, 你要把水倒到两个杯子里面, 使得杯子水体积几乎相同(体积的差值小于等于1), 并且使得壶里剩下水体积不 ...
- hdu_5873_Football Games(xjb搞)
题目链接:hdu_5873_Football Games 题意: 有n个队,每个队都会给其他队打一场,赢一场得2分,平局得一分,输了不得分,然后给你全部比赛结束后的得分,问你是否有假分 题解: 可以知 ...
- hdu_5761_Rower Bo(xjb猜公式)
题目链接:hdu_5761_Rower Bo 题意: 让你求一个物理问题 题解: xjb猜公式,由题目样例可得,答案为8/7,然后我们可以xjb猜出公式为v1*a/(v1*v1-v2*v2),然后特判 ...
- 51nod1276(xjb)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1276 题意:中文题诶- 思路:xjb 通过画图可以发现对于当前 ...
- 隔壁信概大作业xjb写——同化棋ATAXX
话说泥萌北大信科啊,助教是有多懒...去年黑白棋今年同化棋,顺带打ai都不用自己写标程... 好吧..我知道泥萌重点在各种sb的辅助操作上..什么悲剧的可以随时暂停载入...有毒吧 [据说泥萌上课没讲 ...
- [HDU5902]GCD is Funny(xjb搞)
题意:n个数每次选三个数删除,取其中两个数将gcd放回去两次,问最后剩的数可能是多少 分析:考虑最优情况: 先拿出三个数,留下两个x,x 再来一个y,(x,x,y)我们可以删去一个x,留下两个gcd ...
- hdu_5927_Auxiliary Set(xjb搞)
题目链接:hdu_5927_Auxiliary Set 题意: 给一棵n个节点的树,最开始全部都是重点,现在有q个询问,每次给你一些轻点,并叫你输出整棵树的重点数量, 轻点可能会变为重点,如果这个轻点 ...
- hdu_5813_Elegant Construction(xjb搞)
题目链接:hdu_5813_Elegant Construction 题意: 给你n个点,每个点要可以到达ai个点,可以直接可以间接,不能有环,问是否可行,如果可行就任选一种方式连接,并输出连接的边数 ...
随机推荐
- while( c= getchar(c) &&c!='\n')为什么错误
运算顺序有关,详见 运算符优先级 代码1: #include<iostream> using namespace std; int main() { char c; int m=0; wh ...
- C++quickSort
void QuickSort1(int *s,int left,int right){ int i,j,t,pivot; if(left>right) return; if(left<ri ...
- Java微信开发_00_资源汇总贴
1.微信公众平台技术文档(https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432) 2.微信企业号开发接口文档(ht ...
- javascript-JQuery样式篇(一)
轻量级的JavaScript库,核心依然是JavaScript,不仅兼容了CSS3,还兼容了各种浏览器 强大的选择器,完善的事件机制,出色的Ajax封装,丰富的UI 进入官方网站获取最新的版本 htt ...
- 【leetcode刷题笔记】Recover Binary Search Tree
Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...
- 【Facebook】等差子序列个数
题目: 给定一整数数列,问数列有多少个子序列是等差数列. 即对于包含N个数的数列A,A(0),A(1),……,A(N-1),有多少组(P(0),P(1),……,P(k))满足0<=P(0)< ...
- BZOJ1345:[Baltic2007]序列问题
浅谈栈:https://www.cnblogs.com/AKMer/p/10278222.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?id ...
- 洛谷 2822 组合数问题——质因数有关的dp
题目:https://www.luogu.org/problemnew/show/P2822 发现 k 都是一样的.所以可以设dp[ i ][ j ]表示 n<=i,m<=j 的答案.发现 ...
- win7下vs2010开发atl服务
问题一: 编译服务后,提示出下错误 Microsoft.CppCommon.targets(113,5): error MSB3073: 命令 " ***.exe " /RegS ...
- 数据库高手(DBA专家 ,SSIS,replacation ,tourble shooting)
http://www.cnblogs.com/qanholas/category/266780.html 随笔分类 - mssql SQL Server 2008 Datetime Cast 成 Da ...