#21 WA
  • 板块CF3B Lorry
  • 楼主EDqwq
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/3/7 15:45
  • 上次更新2023/11/5 02:20:40
查看原帖
#21 WA
294562
EDqwq楼主2021/3/7 15:45
/*
  Author: EnderDeer
  Online Judge: Luogu
*/

#include<bits/stdc++.h>

#define int long long
#define mem(x) memset(x,0,sizeof(x))

using namespace std;

int read(){
   int s = 0,w = 1;
   char ch = getchar();
   while(ch < '0' || ch > '9'){if(ch == '-')w = -1;ch = getchar();}
   while(ch >= '0' && ch <= '9')s = s * 10 + ch - '0',ch = getchar();
   return s * w;
}

struct node{
	int w;
	int id;
}e[1000010],e1[1000010];

int n,m;
int ans;
int num;
int num1;
int cnt;
int cnt1;

bool cmp(node x,node y){
	return x.w > y.w;
}

signed main(){
	cin>>n>>m;
	for(int i = 1;i <= n;i ++){
		int v,w;
		v = read(),w = read();
		if(v == 1){
			cnt ++;
			e[cnt].w = w;
			e[cnt].id = i;
		}
		else {
			cnt1 ++;
			e1[cnt1].w = w;
			e1[cnt1].id = i;
		}
	}
	sort(e + 1,e + cnt + 1,cmp);
	sort(e1 + 1,e1 + cnt1 + 1,cmp);
	for(int i = 0;i <= cnt;i ++){
		if((m - i) % 2 == 1)continue;
		int cs1,cs2;
		cs1 = i;
		cs2 = (m - i) / 2;
		if(cs2 < 0)continue;
		if(cs2 > cnt1)continue;
		int s = 0;
		if(cs1 != 0)for(int j = 1;j <= cs1;j ++)s += e[j].w;
		if(cs2 != 0)for(int j = 1;j <= cs2;j ++)s += e1[j].w;
		if(s > ans){
			ans = s;
			num = cs1;
			num1 = cs2;
		}
	}
	cout<<ans<<endl;
	for(int i = 1;i <= num;i ++)cout<<e[i].id<<" ";
	for(int i = 1;i <= num1;i ++)cout<<e1[i].id<<" ";
	return 0;
}
2021/3/7 15:45
加载中...