이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,k,v[100005],s[100005];
ll dp[100005][205],from[100005][205];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>n>>k;
k++;
for(int i=1;i<=n;i++)
{
cin>>v[i];
s[i]=s[i-1]+v[i];
}
for(int i=1;i<=k;i++)
dp[0][i]=1e17;
dp[0][0]=0;
for(int i=1;i<=n;i++)
{
dp[i][0]=1e17;
for(ll j=1;j<=k;j++)
{
dp[i][j]=1e17;
for(ll l=i-1;l>=max(0,i-200);l--)
{
ll val=dp[l][j-1]+(s[i]-s[l])*(s[i]-s[l]);
dp[i][j]=min(dp[i][j],val);
if(dp[i][j]==val)
from[i][j]=l;
}
}
}
ll ans=dp[n][k];
ans=s[n]*s[n]-ans;
ans/=2;
cout<<ans<<'\n';
ll i=n;
ll j=k;
vector<ll> sol;
while(i>0)
{
ll x=from[i][j];
if(x>0)
sol.push_back(x);
i=x;
j--;
}
reverse(sol.begin(),sol.end());
for(int i:sol)
cout<<i<<' ';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |