103062024-03-30 13:31:03111Majomházcpp17Hibás válasz 10/1003.086s87592 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,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
1Elfogadva3ms2112 KiB
2Elfogadva575ms10556 KiB
subtask210/10
3Elfogadva3ms2256 KiB
4Elfogadva3ms2456 KiB
5Elfogadva3ms2544 KiB
6Elfogadva3ms2548 KiB
7Elfogadva3ms2892 KiB
subtask30/10
8Elfogadva4ms2820 KiB
9Elfogadva13ms3072 KiB
10Hibás válasz32ms3572 KiB
11Elfogadva75ms4700 KiB
12Elfogadva186ms7192 KiB
subtask40/20
13Elfogadva4ms3284 KiB
14Elfogadva28ms4144 KiB
15Elfogadva192ms6724 KiB
16Elfogadva1.521s21736 KiB
17Időlimit túllépés3.058s19668 KiB
18Időlimit túllépés3.046s24332 KiB
subtask50/29
19Hibás válasz233ms10728 KiB
20Időlimit túllépés3.053s18140 KiB
21Időlimit túllépés3.062s19492 KiB
22Időlimit túllépés3.062s20452 KiB
23Időlimit túllépés3.055s22308 KiB
subtask60/31
24Elfogadva14ms6360 KiB
25Elfogadva14ms6360 KiB
26Elfogadva14ms6488 KiB
27Elfogadva17ms6912 KiB
28Elfogadva54ms9640 KiB
29Hibás válasz423ms16400 KiB
30Időlimit túllépés3.069s19220 KiB
31Időlimit túllépés3.053s19368 KiB
32Időlimit túllépés3.065s20312 KiB
33Időlimit túllépés3.062s21560 KiB
34Időlimit túllépés3.086s23132 KiB
35Időlimit túllépés3.046s26228 KiB
36Időlimit túllépés3.078s31344 KiB
37Időlimit túllépés3.059s37832 KiB
38Időlimit túllépés3.072s59912 KiB
39Időlimit túllépés3.073s70108 KiB
40Időlimit túllépés3.062s87592 KiB