Codeforces Beta Round #3 B. Lorry 暴力 二分
B. Lorry
题目连接:
http://www.codeforces.com/contest/3/problem/B
Description
A group of tourists is going to kayak and catamaran tour. A rented lorry has arrived to the boat depot to take kayaks and catamarans to the point of departure. It's known that all kayaks are of the same size (and each of them occupies the space of 1 cubic metre), and all catamarans are of the same size, but two times bigger than kayaks (and occupy the space of 2 cubic metres).
Each waterborne vehicle has a particular carrying capacity, and it should be noted that waterborne vehicles that look the same can have different carrying capacities. Knowing the truck body volume and the list of waterborne vehicles in the boat depot (for each one its type and carrying capacity are known), find out such set of vehicles that can be taken in the lorry, and that has the maximum total carrying capacity. The truck body volume of the lorry can be used effectively, that is to say you can always put into the lorry a waterborne vehicle that occupies the space not exceeding the free space left in the truck body.
Input
The first line contains a pair of integer numbers n and v (1 ≤ n ≤ 105; 1 ≤ v ≤ 109), where n is the number of waterborne vehicles in the boat depot, and v is the truck body volume of the lorry in cubic metres. The following n lines contain the information about the waterborne vehicles, that is a pair of numbers ti, pi (1 ≤ ti ≤ 2; 1 ≤ pi ≤ 104), where ti is the vehicle type (1 – a kayak, 2 – a catamaran), and pi is its carrying capacity. The waterborne vehicles are enumerated in order of their appearance in the input file.
Output
In the first line print the maximum possible carrying capacity of the set. In the second line print a string consisting of the numbers of the vehicles that make the optimal set. If the answer is not unique, print any of them.
Sample Input
3 2
1 2
2 7
1 3
Sample Output
7
2
Hint
题意
给你n个物品,然后给你一个体积为v的背包。
每个物品的体积只可能是1,或者2.
每个物品都有价值。
问你这个背包最多装多少价值的物品走。
题解:
总共就两种物品嘛,随便搞搞。
暴力枚举一种物品,然后二分另外一种物品就好了。
当然你想two pointer也是兹瓷的。
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
pair<int,int> p1[maxn],p2[maxn];
int sum1[maxn],sum2[maxn];
int n1,n2;
bool cmp(pair<int,int> A,pair<int,int> B)
{
return A.first>B.first;
}
int main()
{
int n,v;
scanf("%d%d",&n,&v);
for(int i=1;i<=n;i++)
{
int x,y;scanf("%d%d",&x,&y);
if(x==1)p1[++n1]=make_pair(y,i);
else p2[++n2]=make_pair(y,i);
}
sort(p1+1,p1+1+n1,cmp);
sort(p2+1,p2+1+n2,cmp);
for(int i=1;i<=n1;i++)
sum1[i]=sum1[i-1]+p1[i].first;
for(int i=1;i<=n2;i++)
sum2[i]=sum2[i-1]+p2[i].first;
int Ans=0,x=0,y=0;
for(int i=0;i<=n1;i++)
{
if(i>v)break;
int l=0,r=n2,ans=0;
while(l<=r)
{
int mid = (l+r)/2;
if(2*mid<=v-i)ans=mid,l=mid+1;
else r=mid-1;
}
int tmp=sum1[i]+sum2[ans];
if(tmp>Ans)
{
Ans=tmp;
x=i,y=ans;
}
}
printf("%d\n",Ans);
for(int i=1;i<=x;i++)
printf("%d ",p1[i].second);
for(int i=1;i<=y;i++)
printf("%d ",p2[i].second);
}
Codeforces Beta Round #3 B. Lorry 暴力 二分的更多相关文章
- 图论/暴力 Codeforces Beta Round #94 (Div. 2 Only) B. Students and Shoelaces
题目传送门 /* 图论/暴力:这是个连通的问题,每一次把所有度数为1的砍掉,把连接的点再砍掉,总之很神奇,不懂:) */ #include <cstdio> #include <cs ...
- 暴力/DP Codeforces Beta Round #22 (Div. 2 Only) B. Bargaining Table
题目传送门 /* 题意:求最大矩形(全0)的面积 暴力/dp:每对一个0查看它左下的最大矩形面积,更新ans 注意:是字符串,没用空格,好事多磨,WA了多少次才发现:( 详细解释:http://www ...
- Codeforces Beta Round #62 题解【ABCD】
Codeforces Beta Round #62 A Irrational problem 题意 f(x) = x mod p1 mod p2 mod p3 mod p4 问你[a,b]中有多少个数 ...
- Codeforces Beta Round #80 (Div. 2 Only)【ABCD】
Codeforces Beta Round #80 (Div. 2 Only) A Blackjack1 题意 一共52张扑克,A代表1或者11,2-10表示自己的数字,其他都表示10 现在你已经有一 ...
- Codeforces Beta Round #83 (Div. 1 Only)题解【ABCD】
Codeforces Beta Round #83 (Div. 1 Only) A. Dorm Water Supply 题意 给你一个n点m边的图,保证每个点的入度和出度最多为1 如果这个点入度为0 ...
- Codeforces Beta Round #79 (Div. 2 Only)
Codeforces Beta Round #79 (Div. 2 Only) http://codeforces.com/contest/102 A #include<bits/stdc++. ...
- Codeforces Beta Round #77 (Div. 2 Only)
Codeforces Beta Round #77 (Div. 2 Only) http://codeforces.com/contest/96 A #include<bits/stdc++.h ...
- Codeforces Beta Round #76 (Div. 2 Only)
Codeforces Beta Round #76 (Div. 2 Only) http://codeforces.com/contest/94 A #include<bits/stdc++.h ...
- Codeforces Beta Round #75 (Div. 2 Only)
Codeforces Beta Round #75 (Div. 2 Only) http://codeforces.com/contest/92 A #include<iostream> ...
随机推荐
- monkey测试===ios-monkey测试工具
iOSmonkey测试工具: crashmonkey 特点: 支持**真机测试.模拟器测试** 支持收集**系统日志(Systemlog)**.**崩溃日志(Crashlog)**.***instru ...
- python之operator操作符函数
operator函数主要分为以下几类:对象比较.逻辑比较.算术运算和序列操作. 举例: #python 3.4 >>> operator.eq(1,2)False >>& ...
- sicily 1172. Queens, Knights and Pawns
Description You all are familiar with the famous 8-queens problem which asks you to place 8 queens o ...
- aspxpivotgrid排序
protected virtual void SetSortBySummary() { foreach (PivotGridField field in grid.Fields) { if (fiel ...
- JavaScript跨域解决方法大全
跨域的定义:JavaScript出于安全性考虑,同源策略机制对跨域访问做了限制.域仅仅是通过“URL的首部”字符串进行识别,“URL的首部”指window.location.protocol +win ...
- Linux安装mysql.8.0.12
1. linux安装mysql8.0.12,亲测可用. 以下是安装过程中出现的问题: 1 [root@localtest1 file]# systemctl start mysqld 2 Job fo ...
- Python 分页功能
自定义分页组件 """ 自定义分页组件的使用方法: pager_obj = Pagination(request.GET.get('page',1),len(HOST_L ...
- umount.nfs: device is busy解决办法
fuser -km /app/nfs/ https://blog.csdn.net/x_i_y_u_e/article/details/42914817
- lvm笔记
安装LVMyum -y install lvm* 创建PV# pvcreate /dev/md5 /dev/sdf1 /dev/sdg 查看PV# pvdisplay 还可以使用命令pvs 和pvsc ...
- ajax向php传参数对数据库操作
刚入门php,要求要对多用户进行批量删除(当然实际中是不可能的),在这就以此为例. 大意就是通过对数据库中用户查询,将用户信息显示在页面表格中,在进行多项选择后将所选行参数通过ajax传入后台php文 ...