zoukankan      html  css  js  c++  java
  • AT4168 [ARC100C] Or Plus Max

    (whk)回来了。

    考虑我们需要维护一个子集的信息。
    对于二进制的子集信息维护有一个很经典的操作:
    高维前缀和。

    AT4168 [ARC100C] Or Plus Max
    // Problem: AT4168 [ARC100C] Or Plus Max
    // Contest: Luogu
    // URL: https://www.luogu.com.cn/problem/AT4168
    // Memory Limit: 1000 MB
    // Time Limit: 2000 ms
    // 
    // Powered by CP Editor (https://cpeditor.org)
    
    #include<iostream>
    #include<cstdio>
    #define ll long long
    #define N 1000005
    
    struct P{
    	int mx1,mx2;
    }f[N];
    
    ll n;
    
    int main(){
    	scanf("%lld",&n);
    	for(int i = 0;i <= (1 << n) - 1;++i){
    		ll x;
    		scanf("%lld",&x);
    		f[i].mx1 = x;
    		f[i].mx2 = 0;
    	}
    	for(int i = 0;i <= n - 1;++i){
    		for(int j = 0;j <= (1 << n) - 1;++j){
    			if(j & (1 << i)){
    				int to = j ^ (1 << i);
    				P k;
    				if(f[j].mx1 > f[to].mx1){
    					k.mx1 = f[j].mx1;
    					k.mx2 = std::max(f[to].mx1,f[j].mx2);
    				}
    				else{
    					k.mx1 = f[to].mx1;
    					k.mx2 = std::max(f[to].mx2,f[j].mx1);
    				}
    				f[j] = k;
    			}
    			
    		}
    	}
    	ll ans = 0;
    	for(int i = 1;i <= (1 << n) - 1;++i)
    	std::cout<<(ans = std::max(ans,(ll)f[i].mx1 + f[i].mx2))<<std::endl;
    }
    
  • 相关阅读:
    [爬虫] js
    [爬虫] appium-移动端
    如何进行代码的重构
    重写与覆盖的区别
    解决C#中FileSystemWatcher类的Changed事件触发多次的问题
    关于sqlserver 2008 远程导入表数据
    css 选择器
    前端三剑客
    前端的概述
    元类作业
  • 原文地址:https://www.cnblogs.com/dixiao/p/14985698.html
Copyright © 2011-2022 走看看