제출 #569450

#제출 시각아이디문제언어결과실행 시간메모리
569450chirathnirodha수열 (APIO14_sequence)C++17
50 / 100
2081 ms54096 KiB
//Coded by Chirath Nirodha #include<bits/stdc++.h> //#include <ext/pb_ds/assoc_container.hpp> //using namespace __gnu_pbds; using namespace std; #define F first #define S second #define PB push_back #define MP make_pair #define P push #define I insert typedef long long ll; typedef long double ld; typedef unsigned long long ull; //typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> indexed_set; const ll mod=1e9+7; inline void io(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } ll n,k; ll a[100000]; ll arr[100000][210]; ll brr[100000][210]; ll sum[100000]; ll rec(ll x,ll y){ if(y==1){ arr[x][y]=0; return 0; } if(arr[x][y]!=0)return arr[x][y]; for(int i=y-2;i<x;i++){ ll temp=rec(i,y-1)+(sum[x]-sum[i])*sum[i]; if(i==y-2 || arr[x][y]<temp){ arr[x][y]=temp; brr[x][y]=i+1; } } return arr[x][y]; } void solve(){ io(); cin>>n>>k; for(int i=0;i<n;i++){ cin>>a[i]; sum[i]=a[i]; if(i!=0)sum[i]+=sum[i-1]; } cout<<rec(n-1,k+1)<<endl; pair<ll,ll> p={n-1,k+1}; while(p.S>1){ cout<<brr[p.F][p.S]<<" "; p.F=brr[p.F][p.S]-1;p.S--; } cout<<endl; } int main(){ io(); solve(); //int t;cin>>t;for(int i=0;i<t;i++)solve(); return 0; } /* 7 3 4 1 3 4 0 2 3 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...