제출 #799674

#제출 시각아이디문제언어결과실행 시간메모리
799674Ahmed57K개의 묶음 (IZhO14_blocks)C++17
0 / 100
1 ms340 KiB
#include <bits/stdc++.h> using namespace std; long long dp[3001][3001]; long long arr[3001]; long long qu(int l,int r){ long long ma = 0; for(int i = l;i<=r;i++){ ma = max(ma,arr[i]); } return ma; } void dc(int i,int l,int r,int optl,int optr){ if(l>r)return; int mid = (l+r)/2; pair<long long,int> best = {1e18,0}; for(int cut = optl;cut<min(mid,optr+1);cut++){ long long sum = qu(cut+1,mid); best = min(best,make_pair(sum+dp[i-1][cut],cut)); } dp[i][mid] = best.first; int opt = best.second; if(l==r)return; dc(i,l,mid,optl,opt); dc(i,mid+1,r,opt,optr); } int main(){ //ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); int n,k; cin>>n>>k; for(int i = 1;i<=n;i++){ cin>>arr[i]; } for(int i = 1;i<=n;i++)dp[0][i] = 1e18; dp[0][0] = 0; for(int i = 1;i<=k;i++){ dc(i,1,n,0,n-1); for(int e= 0;e<i;e++){ dp[i][e] = 1e18; } } cout<<dp[k][n]<<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...