首页 > 其他分享 >AtCoder Regular Contest 100 E-Or Plus Max

AtCoder Regular Contest 100 E-Or Plus Max

时间:2022-10-23 10:11:15浏览次数:46  
标签:AtCoder 155 Contest int 194 leq state Max

Description

There is an integer sequence of length \(2^N\): \(A_0, A_1, ..., A_{2^N-1}\). (Note that the sequence is 0-indexed.)

For every integer K satisfying \(1 \leq K \leq 2^N-1\), solve the following problem:

  • Let iand j be integers. Find the maximum value of \(A_i + A_j\) where \(0 \leq i < j \leq 2^N-1\) and \((i \or j) <= K\) Here, or denotes the bitwise OR.

Limit

\(1 <= n <= 18\)

\(1 <= A_i <= 1e9\)

All values in input are integers.

Example

input1

2
1 2 3 1

output1

3
4
5

input2

3
10 71 84 33 6 47 23 25

output2

81
94
155
155
155
155
155

input3

4
75 26 45 72 81 47 97 97 2 2 25 82 84 17 56 32

output3

101
120
147
156
156
178
194
194
194
194
194
194
194
194
194

solution

用 pair<int,int> Max[state] 表示i or j = state 时的最大值和次大值为多少(没有次大,次大为-1)

答案随着state的增大单调递增

当求解 Max[state] 时,可以枚举state的子集,然后选出其中的最大的和次大的。同时由于上面的那条性质,所以子集大的答案一定更优,那么就不必枚举state的所有子集,只需要比较它的前n大的子集即可,也就是将state的每一个二进制1尝试取反变成0之后的那最多n个。

#include<algorithm>
#include<iostream>
#include<vector>
using namespace std;
int A[1 << 18];
pair<int,int> Max[1 << 18];

inline bool cmp(const int &x , const int &y) { return A[x] > A[y]; }

int main()
{
	int n , Ans = 0;
	cin >> n;
	for(int i = 0 ; i < (1 << n) ; ++i)
		cin >> A[i];
	for(int i = 0 ; i < (1 << n) ; ++i)
	{
		vector<int> v; v.push_back(i);
		for(int j = 0 ; j < n ; ++j)
			if(i & (1 << j))
			{
				v.push_back(Max[i ^ (1 << j)].first);
				if(Max[i ^ (1 << j)].second != -1)
					v.push_back(Max[i ^ (1 << j)].second);
			}
		sort(v.begin() , v.end() , cmp);
		v.erase(unique(v.begin() , v.end()) , v.end());
		if(v.size() == 1) 
			Max[i] = make_pair(v[0] , -1);
		else
			Max[i] = make_pair(v[0] , v[1]);
		Ans = max(Ans , A[Max[i].first] + (~Max[i].second ? A[Max[i].second] : 0));
		if(i) cout << Ans << '\n';
	}
	return 0;
}

标签:AtCoder,155,Contest,int,194,leq,state,Max
From: https://www.cnblogs.com/R-Q-R-Q/p/16817998.html

相关文章

  • Atcoder Regular Round #151 B题 A < AP 题解
    题意:给定一个排列\(p\),求满足下列条件的\(a\)数组的数量。\(1\lea_i\lem\)。\(a\)数组的字典序小于\(\{a_{p_1},a_{p_2},\cdots,a_{p_n}\}\)。题解:由于每......
  • AtCoder Beginner Contest 274
    E-BoosterTSP问题变种,典中典。AC代码//Problem:E-Booster//Contest:AtCoder-キーエンスプログラミングコンテスト2022(AtCoderBeginner//Contest274)URL......
  • AtCoder Beginner Contest 263 Erasing Prime Pairs
    AtCoder传送门洛谷传送门题意有\(i\)种数,第\(i\)种数是\(a_i\),有\(b_i\)个。每次可以选择两个数\(x,y\)满足\(x+y\)为质数,将它们删除。问最多能删多少次。......
  • Weekly Contest 314
    WeeklyContest314ProblemATheEmployeeThatWorkedontheLongestTask思路按照题目要求遍历一下就行代码classSolution:defhardestWorker(self,n:int......
  • Spring上传文件报错the request was rejected because its size (15920203) exceeds t
    背景今天在查异常日志的时候,发现了一条这样的报错therequestwasrejectedbecauseitssize(15920203)exceedstheconfiguredmaximum(10485760)详细堆栈如下:or......
  • 西工大校赛2 weekly contest 10.16
    西工大校赛2weeklycontest10.16[Problems-Codeforces.pdf](assets/Problems-Codeforces-20221019121149-0g83yz5.pdf)校赛网址:https://codeforces.com/contestIn......
  • AtCoder Regular Contest 151 C. 01 Game
    题目链接:https://atcoder.jp/contests/arc151/tasks/arc151_c1/*2博弈3归纳法,先开始处理单个情况,01是相对的40....1:必败50....0:必胜策略:在0边上放......
  • 2017 ACM Arabella Collegiate Programming Contest div2的题,部分题目写个题解
    F.MonkeyingAround 维护点在多少个线段上​​http://codeforces.com/gym/101350/problem/F​​题意:有m个笑话,每个笑话的区间是[L,R],笑话种类有1e5,一开始所有猴子都在......
  • torch:针对mask掉的位置不进行softmax
    错误方式希望在进行softmax之前,如果对被mask掉的位置加上一个特别小的数字,那么softmax之后就会变成0。pad_mask=(1-doc_token_mask)*(-1999999)#把原本0的位置......
  • Maxwell
    MaxwellMaxwell介绍    Maxwell:实时读取mysql的Binlog,生成json格式的消息,发送给kafka、redis等    下载地址:https://github.com/zendesk/maxwell/releases/down......