题目链接:http://codeforces.com/contest/808/problem/E

题意:最多有100000个物品最大能放下300000的背包,每个物品都有权值和重量,为能够带的最大权值。

物品重量只有3中。重量为1,2,3。

题解:可以用3分写,这里先不介绍。主要讲一下二分+dp的方法。首先将重量为1,2,3的物品分别存下来,

然后从大到小排序一下。求一下前缀和,先将1,2二分,因为1,2的取法就两种要么取2,要么取两个1代替

2这里就需要二分,比较一下b[mid] and a[k-2*mid+1]+a[k-2*mid+2]的大小,b存的是2,a存的是1,

k表示背包放了多少,比较一下下一个应该是放2还是放两个1,由于原序列是排好序的,所以如果

b[mid]>a[k-2*mid+1]+a[k-2*mid+2]就可以往前二分,反正往后。最后用一个dp[i]表示放了i重量的背

包最大权值是多少。之后处理一下3就行了。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 3e5 + 10; int n, m, a[N], b[N], c[N], an, bn, cn;
ll sa[N], sb[N], sc[N], dp[N];
bool cmp(ll x , ll y) {return x > y;}
int main() {
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i ++) {
int w, x;
scanf("%d %d", &w, &x);
if (w == 1) a[++an] = x;
if (w == 2) b[++bn] = x;
if (w == 3) c[++cn] = x;
}
sort(a + 1, a + an + 1, cmp);
for (int i = 1; i <= m; i ++) sa[i] = sa[i-1] + a[i];
sort(b + 1, b + bn + 1, cmp);
for (int i = 1; i <= m; i ++) sb[i] = sb[i-1] + b[i];
sort(c + 1, c + cn + 1, cmp);
for (int i = 1; i <= m; i ++) sc[i] = sc[i-1] + c[i];
dp[1] = sa[1];
for (int k = 2; k <= m; k ++) {
if (sb[1] <= a[k] + a[k-1]) {
dp[k] = sa[k]; continue;
}
int l = 1, r = k / 2 + 1;
while (r > l + 1) {
int mid = (l + r) >> 1;
if (b[mid] > a[k-2*mid+1] + a[k-2*mid+2]) l = mid;
else r = mid;
}
dp[k] = sb[l] + sa[k-2*l];
}
for (int i = 1; i <= m; i ++) dp[i] = max(dp[i], dp[i-1]);
long long ans = 0;
for (int i = 0; i <= cn && i * 3 <= m; i ++) ans = max(ans, sc[i] + dp[m-3*i]);
printf("%lld\n", ans);
return 0;
}

codeforces 808 E. Selling Souvenirs (dp+二分+思维)的更多相关文章

  1. Codeforces 808 E. Selling Souvenirs(三分)

    E. Selling Souvenirs 题意: n件物品,有重量和价值,重量只有三种1,2,3.问取不超过m重量的物品的价值总和最大是多少.(n<=1e5,w<=3e5) 思路: n*w ...

  2. Educational Codeforces Round 21E selling souvenirs (dp)

    传送门 题意 给出n个体积为wi,价值为ci的物品,现在有一个m大的背包 问如何装使得最后背包内的物品价值最大,输出价值 分析 一般的思路是01背包,但n*v不可做 题解的思路 We can iter ...

  3. codeforces 808 D. Array Division(二分)

    题目链接:http://codeforces.com/contest/808/problem/D 题意:有一串长度为n的数组,要求选择一个数字交换它的位置使得这串数能够分成两串连续的和一样的数组. 这 ...

  4. Codeforces Global Round 1D(DP,思维)

    #include<bits/stdc++.h>using namespace std;int dp[1000007][7][7];int cnt[1000007];int main(){  ...

  5. Selling Souvenirs CodeForces - 808E (分类排序后DP+贪心)

    E. Selling Souvenirs time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  6. [Codeforces 865C]Gotta Go Fast(期望dp+二分答案)

    [Codeforces 865C]Gotta Go Fast(期望dp+二分答案) 题面 一个游戏一共有n个关卡,对于第i关,用a[i]时间通过的概率为p[i],用b[i]通过的时间为1-p[i],每 ...

  7. Codeforces C. Maximum Value(枚举二分)

    题目描述: Maximum Value time limit per test 1 second memory limit per test 256 megabytes input standard ...

  8. HDU 3433 (DP + 二分) A Task Process

    题意: 有n个员工,每个员工完成一件A任务和一件B任务的时间给出,问要完成x件A任务y件B任务所需的最短时间是多少 思路: DP + 二分我也是第一次见到,这个我只能说太难想了,根本想不到. dp[i ...

  9. 两种解法-树形dp+二分+单调队列(或RMQ)-hdu-4123-Bob’s Race

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 题目大意: 给一棵树,n个节点,每条边有个权值,从每个点i出发有个不经过自己走过的点的最远距离 ...

随机推荐

  1. golang文档、中文、学习文档

    Golang中文文档地址 http://zh-golang.appspot.com/doc/ Golang非英文文档地址: https://github.com/golang/go/wiki/NonE ...

  2. PID算法资料【视频+PDF介绍】

    最近一直有网友看到我的博客后,加我好友,问我能不能给发一些PID的资料,今天找了一些资料放到百度网盘上,给大家下载: 视频资料 链接:https://pan.baidu.com/s/12_IlLgBI ...

  3. html以前没有学到的标签

    <q>标签,短文本引用 <blockquote>标签,长文本引用 <address>标签,为网页加入地址信息 <code>标签,插入单行代码 <p ...

  4. oracle常用的一些sql命令

    //查看系统当前时间   HH24 24小时制  MI是正确的分钟 select to_char(sysdate,'yyyy-mm-dd HH24:MI:SS') from dual //HH非24 ...

  5. Selenium模拟登陆百度贴吧

    Selenium模拟登陆百度贴吧 from selenium import webdriver from time import sleep from selenium.webdriver.commo ...

  6. 使用 PowerShell 远程管理

    要求 PowerShell 版本要求至少是2.0版本以上,目前PowerShell 2.0 支持最低的操作系统版本为Windows XP.本次操作使用的是 PowerShell 5.1 请使用管理员身 ...

  7. caddy & grpc(3) 为 caddy 添加一个 反向代理插件

    caddy-grpc 为 caddy 添加一个 反向代理插件 项目地址:https://github.com/yhyddr/caddy-grpc 前言 上一次我们学习了如何在 Caddy 中扩展自己想 ...

  8. 消息中间件-activemq实战之消息持久化(六)

    对于activemq消息的持久化我们在第二节的时候就简单介绍过,今天我们详细的来分析一下activemq的持久化过程以及持久化插件.在生产环境中为确保消息的可靠性,我们肯定的面临持久化消息的问题,今天 ...

  9. MySQL高速缓存

    MySQL高速缓存启动方法及参数详解query_cache_size=32M query_cache_type=1,默认配置下,MySQL的该功能是没有启动的,可能你通过show variables ...

  10. 搭建Springboot网站有感

    最近心血来潮,搭建了个人网站,一方面想学习下新的知识,另一方面也想有个作品,在这分享下自己的体会,先不说知识点. 建站容易吗,因人而异,而我在完成这个最最简单的工作时起码经历了3个阶段不同的心理变化, ...