# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
170778 | juggernaut | K blocks (IZhO14_blocks) | C++14 | 3 ms | 760 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
//Just try and the idea will come!
#include<bits/stdc++.h>
#define int long long int
using namespace std;
int n,k,i,a[101],dp[101][101],j,l,sp[101][7],logs[101];
int get(int l,int r){
int len=logs[r-l+1];
return max(sp[l][len],sp[r-(1ll<<len)+1][len]);
}
void calc(int k,int n){
dp[n][k]=1e15;
for(int i=k;i<=n;i++)dp[n][k]=min(dp[n][k],dp[i-1][k-1]+get(i,n));
}
main(){
for(i=2;i<101;i++)logs[i]=logs[i/2]+1;
scanf("%lld%lld",&n,&k);
for(i=1;i<=n;i++)scanf("%lld",&a[i]),dp[i][1]=max(dp[i-1][1],a[i]),sp[i][0]=a[i];
for(j=1;j<7;j++)
for(i=1;i+(1ll<<j)-1<=n;i++)sp[i][j]=max(sp[i][j-1],sp[i+(1ll<<(j-1))][j-1]);
for(j=2;j<=k;j++)
for(i=j;i<=n;i++)calc(j,i);
cout<<dp[n][k];
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |