10306 2024. 03. 30 13:31:03 111 Majomház cpp17 Hibás válasz 10/100 3.086s 87592 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 Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 2112 KiB
2 Elfogadva 575ms 10556 KiB
subtask2 10/10
3 Elfogadva 3ms 2256 KiB
4 Elfogadva 3ms 2456 KiB
5 Elfogadva 3ms 2544 KiB
6 Elfogadva 3ms 2548 KiB
7 Elfogadva 3ms 2892 KiB
subtask3 0/10
8 Elfogadva 4ms 2820 KiB
9 Elfogadva 13ms 3072 KiB
10 Hibás válasz 32ms 3572 KiB
11 Elfogadva 75ms 4700 KiB
12 Elfogadva 186ms 7192 KiB
subtask4 0/20
13 Elfogadva 4ms 3284 KiB
14 Elfogadva 28ms 4144 KiB
15 Elfogadva 192ms 6724 KiB
16 Elfogadva 1.521s 21736 KiB
17 Időlimit túllépés 3.058s 19668 KiB
18 Időlimit túllépés 3.046s 24332 KiB
subtask5 0/29
19 Hibás válasz 233ms 10728 KiB
20 Időlimit túllépés 3.053s 18140 KiB
21 Időlimit túllépés 3.062s 19492 KiB
22 Időlimit túllépés 3.062s 20452 KiB
23 Időlimit túllépés 3.055s 22308 KiB
subtask6 0/31
24 Elfogadva 14ms 6360 KiB
25 Elfogadva 14ms 6360 KiB
26 Elfogadva 14ms 6488 KiB
27 Elfogadva 17ms 6912 KiB
28 Elfogadva 54ms 9640 KiB
29 Hibás válasz 423ms 16400 KiB
30 Időlimit túllépés 3.069s 19220 KiB
31 Időlimit túllépés 3.053s 19368 KiB
32 Időlimit túllépés 3.065s 20312 KiB
33 Időlimit túllépés 3.062s 21560 KiB
34 Időlimit túllépés 3.086s 23132 KiB
35 Időlimit túllépés 3.046s 26228 KiB
36 Időlimit túllépés 3.078s 31344 KiB
37 Időlimit túllépés 3.059s 37832 KiB
38 Időlimit túllépés 3.072s 59912 KiB
39 Időlimit túllépés 3.073s 70108 KiB
40 Időlimit túllépés 3.062s 87592 KiB