Submission #1315816

#TimeUsernameProblemLanguageResultExecution timeMemory
1315816wangzhiyi33Bali Sculptures (APIO15_sculpture)C++20
100 / 100
79 ms440 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int LOG = 45; int angka[2002]; int n,a,b; bool can(int cur){ bool dp[n+1][b+1]; memset(dp,false,sizeof dp); dp[0][0]=true; for(int i=1;i<=n;i++){ for(int j=1;j<=b;j++){ int sum = 0; for(int leng=1;leng<=i;leng++){ // [i-leng+1...i] = sum // [..sum1..] OR [..sum2..] OR [..sum3..] OR [..sum4..] = cur sum += angka[i-leng+1]; if((cur|sum)==cur){ dp[i][j]|=dp[i-leng][j-1]; } } } } for(int q=a;q<=b;q++){ if(dp[n][q]==true){ return true; } } return false; } bool can2(int cur){ int dp[n+1]; for(int q=1;q<=n;q++){ dp[q]=1e15; } dp[0]=0; for(int i=1;i<=n;i++){ int sum=0; for(int leng=1;leng<=i;leng++){ sum+=angka[i-leng+1]; if((cur|sum)==cur){ dp[i]=min(dp[i],dp[i-leng]+1); } } } if(dp[n]<=b)return true; return false; } signed main(){ cin>>n>>a>>b; for(int q=1;q<=n;q++){ cin>>angka[q]; } int x = (1LL<<LOG)-1; if(a==1){ for(int i= LOG-1 ;i>=0 ;i--){ if(can2(x^(1LL<<i))){ x=x^(1LL<<i); } } cout<<x<<endl; return 0; } for (int i = LOG-1; i >= 0; i--) { if (can(x^(1LL<<i))) { x=x^(1LL<<i); } } cout<<x<<endl; }
#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...