hihocoder1496-高維字首和|暴力
http://hihocoder.com/problemset/solution/1115709
其實我感覺高維字首本身也是一種暴力(遞推???)。。。
因為&操作不會使1的數量增加,所以我們可以遞推。。
我把他放到動態規劃裡了因為我感覺他也是 壯壓思想。。。
O(∩_∩)O哈哈~
或者有大佬的程式碼,是暴力。但是剪枝了一下
因為i&j的結果 最大是 i和j中大的數
如果這樣還小,那麼就剪掉它。。
#include <algorithm>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <string>
#include <set>
#include <vector>
/*高維字首和。
我看別人的程式碼,暴力也能大力ac。。
我感覺這個高維字首和壯壓差不多。
更像是一種模擬。
第一個opreator的手法是 得到當前狀態的最大值和最小值。
若j狀態有i 1<<i&j ==true
(dp[1<<i&(j)]=dp[1<<i&(j)]+dp[j])在這兩個狀態中找到最大的兩個數。和程式碼中過載的操作一樣,不要誤會)
*/
using namespace std;
const int N = 1e5 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7;
int n;
pair<int, int> f[1 << 20];
pair<int, int> operator+(pair<int, int> A, pair<int, int> B) {
pair<int, int> ret = A;
if(B.first > ret.first) {
swap(ret.first, ret.second);
ret.first = B.first;
} else if(B.second > ret.second) ret.second = B.second;
return ret;
}
int main() {
int t;
int m; scanf("%d", &t);
while(t--){
for(int i=0;i<1<<20;i++)
f[i]={0,0};//初始化咯
scanf("%d",&m);
for(int i=0;i<m;i++){
scanf("%d",&n);
f[n]=f[n]+make_pair(n,0);//不是1<<n,是n,這個要好好理解。。
}
for(int i=0;i<20;i++)
for(int j=0;j<1<<20;j++)
{
if((1<<i)&j)
f[j^(1<<i)]=f[j^(1<<i)]+f[j];
}
long long ans=-1;
for(int i=0;i<1<<20;i++){
ans=max(ans,1ll*f[i].first*f[i].second*i);
}
cout<<ans<<endl;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll num[1000010];
int main( )
{
//freopen ("F:\\CSLeaning\\Thinking in C++\\hihocoder\\in.in", "r", stdin);
int t;
cin>>t;
while ( t-- )
{
int n;
cin>>n;
for (int i = 0; i < n; ++i)
{
cin>>num[i];
}
sort (num, num+n);
ll ans = 0;
for (int j = n; j >=0 ; --j)
{
for (int i = j-1; i >=0 ; --i)
{
ll tmp_ans = num[i]*num[j];
if( tmp_ans*num[j] <= ans )
break;
ans = max (ans, tmp_ans*(num[j]&num[i]));
}
}
cout<<ans<<endl;
}
return 0;
}
相關推薦
hihocoder1496-高維字首和|暴力
http://hihocoder.com/problemset/solution/1115709 其實我感覺高維字首本身也是一種暴力(遞推???)。。。 因為&操作不會使1的數量增加,所以我
BZOJ:5092 [Lydsy1711月賽]分割序列(貪心&高維字首和)
Description 對於一個長度為n的非負整數序列b_1,b_2,...,b_n,定義這個序列的能量為:f(b)=max{i=0,1,...,n}((b_1 xor b _2 xor...xor b_i)+(b_{i+1} xor b_{i+2} xor...xor b_n))
HihoCoder - 1496:尋找最大值(高維字首和||手動求子集)
描述 給定N個數A1, A2, A3, ... AN,小Ho想從中找到兩個數Ai和Aj(i ≠ j)使得乘積Ai × Aj × (Ai AND Aj)最大。其中AND是按位與操作。 小Ho當然知道怎麼做。現在他想把這個問題交給你。 輸入 第一行
牛客網 NOIP賽前集訓營-普及組(第四場)C--部分和 (高維字首和)
傳送門 解題思路 高維字首和模板題。首先,求字首和有兩種方式,比如說對於求二維字首和來說。 第一種 : for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) sum[i][j]=sum[i-1][j]+sum[i][j-1]-s
高維字首和
高維字首和就是求關於一個集合子集(或超集)的狀態的和 牛客有一道題寫的很好 傳送門 題面就已經說明了高維字首和的原理 連結:https://ac.nowcoder.com/acm/contest/167/C 來源:牛客網 對於一個一維陣列求部分和,可以使用如下程式碼 for
bzoj 5092 分割序列 —— 高維字首和
題目:https://www.lydsy.com/JudgeOnline/problem.php?id=5092 首先,處理出異或字首和 s[i],i 位置的答案就是 s[j] + s[j]^s[i],j <= i 異或的套路是按位考慮,但是這裡有加法...怎麼考慮進位? 所以就不能考慮答案的這一
bzoj 5092 [Lydsy1711月賽]分割序列——高維字首和
題目:https://www.lydsy.com/JudgeOnline/problem.php?id=5092 套路地弄一個字首異或和,就變成 f[ i ]=max_{j=0}^{i} { s[ j ] + (s[ i ]^s[ j ]) }。再套路地考慮按位貪心。 然後看了題解。按位貪心不是確定 f[
SPOJ.TLE - Time Limit Exceeded(DP 高維字首和)
題目連結 \(Description\) 給定長為\(n\)的陣列\(c_i\)和\(m\),求長為\(n\)的序列\(a_i\)個數,滿足:\(c_i\not\mid a_i,\quad a_i\&a_{i+1}=0\)。 \(n\leq 50,m\leq 15,0\leq a_i<2^m
[JZOJ5952] 凱旋而歸 ([BZOJ 5092]【Lydsy1711月賽】分割序列)【高維字首和】【DP】
Description 對於一個長度為m的序列a,記 f ( a
BZOJ5092:[Lydsy1711月賽]分割序列(貪心,高維字首和)
Description 對於一個長度為n的非負整數序列b_1,b_2,...,b_n,定義這個序列的能量為:f(b)=max{i=0,1,...,n}((b_1 xor b_2 xor...xor b_i)+(b_{i+1} xor b_{i+2} xor...xor b_n))其中xor表示按
luoguP3175 [HAOI2015]按位或 min-max容斥 + 高維字首和
考慮min-max容斥 \(E[max(S)] = \sum \limits_{T \subset S} min(T)\) \(min(T)\)是可以被表示出來 即所有與\(T\)有交集的數的概率的和的倒數 通過轉化一下,可以考慮求所有與\(T\)沒有交集的數的概率和 即求\(T\)的補集的
Time Limit Exceeded(高維字首和)
題意 題目連結 題目的意思是給一個數組C,長度為n,每個數字的範圍是2^m,然後要求構造一個數組a,滿足 1、a[i] % C[i] !=0 ; 2、a[i] < 2^m ; 3、a[i] & a[i+1] = 0; Sol 直接dp的話就是先列舉補集的子集,這樣的複雜度是\(3
cf449D. Jzzhu and Numbers(容斥原理 高維字首和)
題意 題目連結 給出\(n\)個數,問任意選幾個數,它們\(\&\)起來等於\(0\)的方案數 Sol 正解居然是容斥原理Orz,然而本蒟蒻完全想不到。。 考慮每一種方案 答案=任意一種方案 - 至少有\(1\)位為\(1\)的方案 + 至少有兩位為\(1\)的方案 - 至少有三位為\(1\)的方案
【高維字首和】SPOJ(TLE)[Time Limit Exceeded]題解
題目概述 題目名稱要不要這麼奇葩而且和題面沒有半毛錢關係啊,我上交題目都以為自己TLE了。 給出 nn 個數 cici ,現在需要構造 aiai 使得: aimodci>0aimodci&
5765 Bonds 高維字首和
這題做了好久,,看了網上的題解也看不太懂,,只知道用高維字首做,,,,,,然後在拉粑粑的時候,,突然想出了一種方法 他是要算出每條邊出現在多少割集中,,,我們可以反著想,,我們可以先算出有多少割集(個數設為sum),在算出這條邊包含多少合法聯通塊中(個數設為x),,然後s
TLE Time Limit Exceeded 高維字首和
題意:給出長度為n的序列c,求非負整數序列a,滿足a<2^m,並且有a[i]&a[i+1]=0,對於每個a[i],要保證a[i]不是c[i]的倍數,求這樣的a[i]序列的個數 思路:d
Intense Heat-字首和暴力求解
【題目】 The heat during the last few days has been really intense. Scientists from all over the Berland study how the temperatures and weath
高維字首和學習小記
問題引入: 現有a[i](0<=i<2n)a[i](0<=i<2^n)a[i](0<=i<2n) 對於每一iii,求∑j∈ia[j]\sum_{j∈i}a[j]∑j∈ia[j] 這裡的∈∈∈指
【題解】洛谷P1315 [NOIP2011TG] 觀光公交(字首和+貪心)
次元傳送門:洛谷P1315 思路 思路大概想到了 可是程式碼實現卻沒想到 所以參考題解了 D2T3的貪心果然有難度 我們考慮在每次用加速器有兩種情況 到下一個點還需要等待:以後的時間就不再影響了 到下一個點不需要等待:那麼就會影響到後面的時間直到出現情況1(或者到最後一個點) 用sum
atcoder tenka1 2018 e Equilateral - 字首和
題目大意:給一張黑白網格圖,問有多少黑點的無序三元組,兩兩曼哈頓距離相等。300。 題解:轉切比雪夫距離,發現一定有至少兩個點的連向平行於座標軸。 列舉計算即可,注意等腰直角三角形的情況若不處理會被計兩次。 #include<bits/stdc++.h> #define gc