Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Problem link :
- //CREDITS : sanath kumar
- #include<bits/stdc++.h>
- using namespace std;
- #define ll long long int
- #define ld long double
- #define mod 1000000007
- #define inf 1e9
- #define endl "\n"
- #define pb push_back
- #define vi vector<ll>
- #define vs vector<string>
- #define pii pair<ll,ll>
- #define ump unordered_map
- #define mp make_pair
- #define pq_max priority_queue<ll>
- #define pq_min priority_queue<ll,vector<ll>,greater<ll>>
- #define all(v) v.begin(),v.end()
- #define ff first
- #define ss second
- #define mid(l,r) (l+(r-l))/2
- #define bitc(x) __builtin_popcount(x)
- #define read(a,n) for(int i=0;i<n;i++) cin>>a[i];
- #define loop(i,a,b) for(int i=(a);i<=(b);i++)
- #define looprev(i,a,b) for(int i=(a);i>=(b);i--)
- #define iter(c,it) for(__typeof(c.begin()) it=c.begin();it!=c.end();it++)
- #define boost ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
- #define log(args...) {string _s=#args;replace(_s.begin(),_s.end(),',',' ');stringstream _ss(_s);istream_iterator<string> _it(_ss);err(_it,args);}
- #define logarr(arr,a,b) for(int z=(a);z<=(b);z++) cout<<(arr[z])<<" ";cout<<endl;
- template<typename T> void shiftr(T *arr,ll n){for(int i=n;i>=1;i--) arr[i]=arr[i-1];arr[0]=0;}
- template<typename T> T gcd(T a,T b) {if(b==0) return a; return gcd(b,a%b);}
- template<typename T> T lcm(T a,T b) {return a*(b/gcd(a,b));}
- template<class T> T add(T a,T b) {return ((a%mod)+(b%mod))%mod;}
- template<class T> T sub(T a,T b) {return ((a%mod)-(b%mod)+mod)%mod;}
- template<class T> T mul(T a,T b) {return ((a%mod)*(b%mod)*(1LL))%mod;}
- template<class T> void debug(set<T> S){cout<<"[ ";for(auto i:S) cout<<i<<" ";cout<<"] "<<endl;}
- template<class T> void debug(vector<T> v){cout<<"[ ";for(auto i:v) cout<<i<<" ";cout<<"] "<<endl;}
- template<class T> void debug(multiset<T> S){cout<<"[ ";for(auto i:S) cout<<i<<" ";cout<<"] "<<endl;}
- template<class T> void debug(unordered_set<T> S){cout<<"[ ";for(auto i:S) cout<<i<<" ";cout<<"] "<<endl;}
- template<class T,class X> void debug(T *arr,X s,X e){cout<<"[ ";loop(i,s,e) cout<<arr[i]<<" ";cout<<"] "<<endl;}
- template<class T,class V> void debug(pair<T,V> p){cout<<"{";cout<<p.ff<<" "<<p.ss<<"}"<<endl;}
- template<class T,class V> void debug(vector<pair<T,V>> v){cout<<"[ "<<endl;for(auto i:v) debug(i);cout<<"]"<<endl;}
- template<class T,class V> void debug(set<pair<T,V>> s){cout<<"[ "<<endl;for(auto i:s) debug(i);cout<<"]"<<endl;}
- template<class T,class V> void debug(multiset<pair<T,V>> s){cout<<"[ "<<endl;for(auto i:s) debug(i);cout<<"]"<<endl;}
- void err(istream_iterator<string> it){}
- template<typename T,typename... Args>
- void err(istream_iterator<string> it,T a,Args... args){
- cout<<*it<<" = "<<a<<endl;
- err(++it,args...);
- }
- ll *getfactorial(){
- int m=1e6;
- ll *fact=new ll[m+1];
- fact[0]=1;
- loop(i,1,m){
- fact[i]=(fact[i-1]*i)%mod;
- }
- // time complexity O(n)
- return fact;
- }
- vi *getfactors(){
- int n=2e5;
- vi *factors=new vi[n+5];
- loop(i,1,n){
- for(int j=i;j<=n;j+=i){
- factors[j].pb(i);
- }
- }
- // time complexity O(nlogn)
- return factors;
- }
- ll power(ll a,ll b,ll m=mod){
- if(b==0) return 1;
- ll smallans=power(a,b/2,m);
- ll ans=(smallans*smallans)%m;
- if(b%2==1){
- ans=(ans*a)%m;
- }
- return ans;
- // time complexity O(logb)
- }
- bool *isprime(){
- int m=1e6;
- bool *p=new bool[m+5];
- loop(i,0,m) p[i]=true;
- p[0]=false;
- p[1]=false;
- loop(i,2,sqrt(m)){
- for(int j=2*i;j<=m;j+=i){
- p[j]=false;
- }
- }
- // time complexity O(nlogn)
- return p;
- }
- ll *fac=getfactorial();
- ll nCr(ll n,ll r,int m=mod){
- if(n<r) return 0;
- ll ans=fac[n];
- ans=(ans*power(fac[n-r],m-2))%m;
- ans=(ans*power(fac[r],m-2))%m;
- return ans;
- }
- //==================START==================
- ll freq[15];
- ll n,k;
- vector<pair<ll,ll>> v[25];
- ll dp[25];
- ll solve(int i){
- if(i==n) return 0;
- if(dp[i]!=-1) return dp[i];
- ll ans=-1;
- for(int j=0;j<k;j++){
- if(freq[j]==2) continue;
- freq[v[i][j].ss]++;
- ans=max(ans,v[i][j].ff+solve(i+1));
- freq[v[i][j].ss]--;
- }
- return dp[i]=ans;
- }
- int main(){
- boost
- int t;
- cin>>t;
- while(t--){
- cin>>n>>k;
- loop(i,0,n-1) v[i].clear();
- ll a[n];
- read(a,n);
- loop(j,0,n-1){
- loop(i,1,k){
- int x=(a[j]&i);
- v[j].pb({x,i});
- }
- }
- loop(i,0,n-1) dp[i]=-1;
- cout<<solve(0)<<endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement