103072024-03-30 13:33:29111Majomházcpp17Hibás válasz 10/1003.101s88768 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=k-1,k2=0;
	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
2Elfogadva578ms10428 KiB
subtask210/10
3Elfogadva3ms2320 KiB
4Elfogadva3ms2308 KiB
5Elfogadva3ms2520 KiB
6Elfogadva3ms2864 KiB
7Elfogadva3ms2836 KiB
subtask30/10
8Elfogadva4ms3148 KiB
9Elfogadva14ms3608 KiB
10Hibás válasz32ms4272 KiB
11Elfogadva74ms5300 KiB
12Elfogadva186ms7948 KiB
subtask40/20
13Elfogadva4ms3972 KiB
14Elfogadva27ms4752 KiB
15Elfogadva193ms7460 KiB
16Elfogadva1.534s22312 KiB
17Időlimit túllépés3.059s20324 KiB
18Időlimit túllépés3.019s24744 KiB
subtask50/29
19Elfogadva230ms10968 KiB
20Időlimit túllépés3.059s18792 KiB
21Időlimit túllépés3.068s20256 KiB
22Időlimit túllépés3.101s21608 KiB
23Időlimit túllépés3.068s23148 KiB
subtask60/31
24Elfogadva14ms7320 KiB
25Elfogadva14ms7316 KiB
26Elfogadva14ms7628 KiB
27Elfogadva17ms8136 KiB
28Hibás válasz56ms10976 KiB
29Hibás válasz425ms17648 KiB
30Időlimit túllépés3.072s20284 KiB
31Időlimit túllépés3.059s20876 KiB
32Időlimit túllépés3.058s21724 KiB
33Időlimit túllépés3.059s23076 KiB
34Időlimit túllépés3.078s24712 KiB
35Időlimit túllépés3.075s27768 KiB
36Időlimit túllépés3.072s32556 KiB
37Időlimit túllépés3.065s38920 KiB
38Időlimit túllépés3.038s61176 KiB
39Időlimit túllépés3.068s71492 KiB
40Időlimit túllépés3.066s88768 KiB