10309 2024. 03. 30 13:38:19 111 Majomház cpp17 Hibás válasz 20/100 3.107s 140364 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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1840 KiB
2 Elfogadva 913ms 72356 KiB
subtask2 10/10
3 Elfogadva 3ms 2296 KiB
4 Elfogadva 3ms 2512 KiB
5 Elfogadva 3ms 2568 KiB
6 Elfogadva 3ms 2676 KiB
7 Elfogadva 3ms 2652 KiB
subtask3 10/10
8 Elfogadva 3ms 2960 KiB
9 Elfogadva 16ms 4888 KiB
10 Elfogadva 43ms 6756 KiB
11 Elfogadva 90ms 8368 KiB
12 Elfogadva 217ms 11552 KiB
subtask4 0/20
13 Elfogadva 3ms 3660 KiB
14 Hibás válasz 4ms 3928 KiB
15 Elfogadva 188ms 24600 KiB
16 Hibás válasz 2.421s 135948 KiB
17 Időlimit túllépés 3.068s 50320 KiB
18 Időlimit túllépés 3.082s 33364 KiB
subtask5 0/29
19 Elfogadva 12ms 5796 KiB
20 Időlimit túllépés 3.107s 117000 KiB
21 Időlimit túllépés 3.075s 82556 KiB
22 Időlimit túllépés 3.081s 51324 KiB
23 Időlimit túllépés 3.063s 42156 KiB
subtask6 0/31
24 Elfogadva 14ms 6820 KiB
25 Elfogadva 14ms 6948 KiB
26 Elfogadva 14ms 6956 KiB
27 Elfogadva 14ms 7000 KiB
28 Hibás válasz 17ms 7348 KiB
29 Elfogadva 18ms 7484 KiB
30 Időlimit túllépés 3.045s 140364 KiB
31 Időlimit túllépés 3.068s 113008 KiB
32 Időlimit túllépés 3.082s 83852 KiB
33 Időlimit túllépés 3.072s 54156 KiB
34 Időlimit túllépés 3.052s 42708 KiB
35 Időlimit túllépés 3.059s 35064 KiB
36 Időlimit túllépés 3.072s 34080 KiB
37 Időlimit túllépés 3.048s 37708 KiB
38 Időlimit túllépés 3.072s 53944 KiB
39 Időlimit túllépés 3.072s 66872 KiB
40 Időlimit túllépés 3.082s 86968 KiB