제출 #1131056

#제출 시각아이디문제언어결과실행 시간메모리
1131056Champ_NamanBali Sculptures (APIO15_sculpture)C++20
100 / 100
102 ms516 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf 1e18
#define nl '\n'

int n, a, b;

inline void solve(){
   int c[n+1], dp[n+1];
   for(int i=1; i<=n; i++) cin>>c[i];

   int ans = (1ll<<42) - 1;

   for(int bit=41; bit>=0; bit--){
      ans -= (1ll<<bit);

      dp[0] = 0;
      for(int i=1; i<=n; i++){
         dp[i] = inf;

         int sum = 0;
         for(int j=i; j>0; j--){
            sum += c[j];
            if((sum | ans) == ans) dp[i] = min(dp[i], dp[j-1] + 1);
         }
      }

      if(dp[n] > b) ans += (1ll<<bit);
   }

   cout<<ans;
}

int dp[101][101];

inline void solve2(){
   int c[n+1];
   for(int i=1; i<=n; i++) cin>>c[i];

   int ans = (1ll<<42) - 1;

   for(int bit=41; bit>=0; bit--){
      ans -= (1ll<<bit);

      dp[0][0] = 1;
      for(int i=1; i<=n; i++){
         for(int k=1; k<=b; k++){
            dp[i][k] = 0;
            
            int sum = 0;
            for(int j=i; j>0; j--){
               sum += c[j];
               if((sum | ans) == ans and dp[j-1][k-1]) dp[i][k] = 1;
            }
         }
      }

      int tf = 0;
      for(int i=a; i<=b; i++) if(dp[n][i]) tf = 1;
      if(!tf) ans += (1ll<<bit);
   }

   cout<<ans;
}

signed main(){
   ios_base::sync_with_stdio(0);
   cin.tie(NULL);cout.tie(NULL);

   cin>>n>>a>>b;
   if(a == 1) solve();
   else solve2();

   return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...