Submission #1204527

#TimeUsernameProblemLanguageResultExecution timeMemory
1204527Bui_Quoc_CuongStove (JOI18_stove)C++20
100 / 100
17 ms2496 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 100005; int n, k; int a[maxn]; namespace sub1 { long long dp[5005][5005]; long long opt[5005]; void solve() { memset(dp,0x3f,sizeof dp); memset(opt,0x3f,sizeof opt); dp[0][0] = opt[0] = 0; for(int j=1;j<=k;j++) { for(int i=1;i<=n;i++) { opt[i] = min(opt[i-1], dp[i-1][j-1] - a[i]); } for(int i=1;i<=n;i++) { dp[i][j] = opt[i] + a[i]+1; } } cout << dp[n][k]; } } namespace sub2 { bool dd[maxn]; void solve() { vector<pair<int,pair<int,int>>> diff; for(int i=2;i<=n;i++) diff.push_back({a[i] - a[i-1], {i-1,i}}); sort(diff.begin(),diff.end()); k--; while(k--) { dd[diff.back().second.second] = 1; diff.pop_back(); } long long ans = 0; for(int i=1;i<=n;i++) { int j = i + 1; while(j <=n && !dd[j]) j++; j--; ans+= a[j]-a[i]+1; i = j; } cout << ans; } } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); // freopen("joi18_stove.inp", "r", stdin); // freopen("joi18_stove.out", "w", stdout); cin >> n >> k; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+1+n); //return sub1::solve(),0; return sub2::solve(),0; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...