10322 2024. 03. 30 20:50:11 111 Majomház cpp17 Időlimit túllépés 40/100 3.099s 16196 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N,K;
	cin>>N>>K;
	vector<int>v(N+1),pf(N+1);
	for(int i=0;i<N;i++){
		cin>>v[i];
		pf[i+1]=pf[i]+v[i];
	}
	auto cost=[&](int s,int e)->int{
		return (pf[e]-pf[s])*(e-s);
	};
	// if(1){
		// N=15;
		// v.resize(N+1),pf.resize(N+1);
		// for(int i=0;i<N;i++){
			// v[i]=rand()%100;
			// pf[i+1]=pf[i]+v[i];
		// }
		// for(int i=1;i<=N;i++){
			// for(int j=1;j<=N;j++){
				// cout<<setw(4)<<cost(i,j)<<' ';
			// }
			// cout<<'\n';
		// }
		// return 1;
	// }
	auto solve=[&](int y)->pair<int,int>{
		vector<int>dp(N+1,1e18),cnt(N+1);
		dp[0]=-y;
		cnt[0]=-1;
		for(int i=1,o=0;i<=N;i++){
			for(int j=o;j<i;j++){
				int x=dp[j]+cost(j,i)+y;
				if(x<dp[i]){
					dp[i]=x;
					cnt[i]=cnt[j]+1;
					o=j;
				}
			}
		}
		return{dp[N],cnt[N]};
	};
	int l=0,h=1e12;
	while(l<h){
		int m=(l+h)/2;
		auto [x,c]=solve(m);
		if(c<=K){
			h=m;
		}
		else{
			l=m+1;
		}
	}
	auto [x,c]=solve(h);
	cout<<x-c*h<<'\n';
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1832 KiB
2 Elfogadva 68ms 2556 KiB
subtask2 10/10
3 Elfogadva 3ms 2404 KiB
4 Elfogadva 3ms 2396 KiB
5 Elfogadva 3ms 2628 KiB
6 Elfogadva 3ms 2716 KiB
7 Elfogadva 3ms 2932 KiB
subtask3 10/10
8 Elfogadva 6ms 3044 KiB
9 Elfogadva 4ms 3300 KiB
10 Elfogadva 4ms 3636 KiB
11 Elfogadva 4ms 3740 KiB
12 Elfogadva 4ms 3812 KiB
subtask4 20/20
13 Elfogadva 305ms 4400 KiB
14 Elfogadva 222ms 4648 KiB
15 Elfogadva 136ms 4792 KiB
16 Elfogadva 59ms 4632 KiB
17 Elfogadva 43ms 4708 KiB
18 Elfogadva 32ms 4740 KiB
subtask5 0/29
19 Időlimit túllépés 3.058s 5804 KiB
20 Időlimit túllépés 3.085s 6272 KiB
21 Elfogadva 2.911s 9028 KiB
22 Elfogadva 1.524s 9264 KiB
23 Elfogadva 912ms 9460 KiB
subtask6 0/31
24 Időlimit túllépés 3.049s 9712 KiB
25 Időlimit túllépés 3.069s 10656 KiB
26 Időlimit túllépés 3.099s 11472 KiB
27 Időlimit túllépés 3.065s 12156 KiB
28 Időlimit túllépés 3.053s 12120 KiB
29 Időlimit túllépés 3.082s 12064 KiB
30 Időlimit túllépés 3.046s 12056 KiB
31 Időlimit túllépés 3.058s 12248 KiB
32 Időlimit túllépés 3.049s 12264 KiB
33 Időlimit túllépés 3.065s 12180 KiB
34 Időlimit túllépés 3.078s 12004 KiB
35 Elfogadva 1.595s 16088 KiB
36 Elfogadva 1.1s 16196 KiB
37 Elfogadva 865ms 15916 KiB
38 Elfogadva 662ms 16120 KiB
39 Elfogadva 632ms 16120 KiB
40 Elfogadva 606ms 16120 KiB