Submission #656014

#TimeUsernameProblemLanguageResultExecution timeMemory
656014HyojinK개의 묶음 (IZhO14_blocks)C++17
100 / 100
179 ms43352 KiB
#include <bits/stdc++.h> using namespace std; #define bit(n,i) ((n>>i)&1) #define all(a) (a).begin(),(a).end() #define pb push_back #define ep emplace_back #define pii pair<int,int> #define piii pair<int,pii> #define fi first #define se second #define ll long long const int MOD=1e9+7; const int base=31; const int N=1e5+5; int n,k,a[N],l[N],minF[N],dp[N][105]; int main() { #ifdef Hyojin freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif //Hyojin ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n>>k; memset(dp,0x3f,sizeof dp); for (int i=1;i<=n;i++) cin>>a[i]; dp[0][1]=0; dp[1][1]=a[1]; for (int i=2;i<=n;i++) dp[i][1]=max(dp[i-1][1],a[i]); for (int i=1;i<=n;i++) { for (l[i]=i-1;l[i]&&a[l[i]]<=a[i];) l[i]=l[l[i]]; } for (int i=2;i<=k;i++) { minF[i-1]=1e9; for (int j=2;j<=n;j++) { minF[j]=dp[j-1][i-1]; for (int t=j-1;t>l[j];t=l[t]) minF[j]=min(minF[j],minF[t]); dp[j][i]=min(dp[l[j]][i],minF[j]+a[j]); } } cout<<dp[n][k]; 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...