103092024-03-30 13:38:19111Majomházcpp17Hibás válasz 20/1003.107s140364 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

#define INF (int)1e18

int pf[100001];

map<tuple<int,int,int>,int>mem;

int cost(int s,int e){
	return (pf[e]-pf[s])*(e-s);
}

int solve(int s,int e,int k){
	if(k==0){
		return cost(s,e);
	}
	if(mem.find({s,e,k})!=mem.end()){
		return mem[{s,e,k}];
	}
	int k1,k2;
	if(k==1){
		k1=0;
		k2=0;
	}
	else{
		k1=k-2;
		k2=1;
	}
	auto calc=[&](int i)->int{
		return solve(s,i,k1)+solve(i,e,k2);
	};
	int l=s+k1+1,h=e-k2-1;
	while(h-l>=3){
		int m1=l+(h-l)/3;
		int m2=h-(h-l)/3;
		if(calc(m1)<=calc(m2)){
			h=m2;
		}
		else{
			l=m1;
		}
	}
	int res=INF;
	for(int i=l;i<=h;i++){
		res=min(res,calc(i));
	}
	mem[{s,e,k}]=res;
	return res;
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N,K;
	cin>>N>>K;
	vector<int>v(N);
	for(int i=0;i<N;i++){
		cin>>v[i];
	}
	for(int i=0;i<N;i++){
		pf[i+1]=pf[i]+v[i];
	}
	cout<<solve(0,N,K)<<'\n';
	// cout<<K<<" "<<mem.size()<<'\n';
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1840 KiB
2Elfogadva913ms72356 KiB
subtask210/10
3Elfogadva3ms2296 KiB
4Elfogadva3ms2512 KiB
5Elfogadva3ms2568 KiB
6Elfogadva3ms2676 KiB
7Elfogadva3ms2652 KiB
subtask310/10
8Elfogadva3ms2960 KiB
9Elfogadva16ms4888 KiB
10Elfogadva43ms6756 KiB
11Elfogadva90ms8368 KiB
12Elfogadva217ms11552 KiB
subtask40/20
13Elfogadva3ms3660 KiB
14Hibás válasz4ms3928 KiB
15Elfogadva188ms24600 KiB
16Hibás válasz2.421s135948 KiB
17Időlimit túllépés3.068s50320 KiB
18Időlimit túllépés3.082s33364 KiB
subtask50/29
19Elfogadva12ms5796 KiB
20Időlimit túllépés3.107s117000 KiB
21Időlimit túllépés3.075s82556 KiB
22Időlimit túllépés3.081s51324 KiB
23Időlimit túllépés3.063s42156 KiB
subtask60/31
24Elfogadva14ms6820 KiB
25Elfogadva14ms6948 KiB
26Elfogadva14ms6956 KiB
27Elfogadva14ms7000 KiB
28Hibás válasz17ms7348 KiB
29Elfogadva18ms7484 KiB
30Időlimit túllépés3.045s140364 KiB
31Időlimit túllépés3.068s113008 KiB
32Időlimit túllépés3.082s83852 KiB
33Időlimit túllépés3.072s54156 KiB
34Időlimit túllépés3.052s42708 KiB
35Időlimit túllépés3.059s35064 KiB
36Időlimit túllépés3.072s34080 KiB
37Időlimit túllépés3.048s37708 KiB
38Időlimit túllépés3.072s53944 KiB
39Időlimit túllépés3.072s66872 KiB
40Időlimit túllépés3.082s86968 KiB