제출 #37788

#제출 시각아이디문제언어결과실행 시간메모리
37788MatheusLealV수열 (APIO14_sequence)C++14
50 / 100
399 ms5644 KiB
#include <bits/stdc++.h> #define int long long #define N 1005 #define K 220 #define f first #define s second #define inf 2000000000 using namespace std; typedef pair<int, int> pii; int n, k, v[N], dp[N][K], sum[N], prox[N][K]; int solve(int ini, int k) { if(k >= n - ini + 1) return 0; if(ini == n || k <= 0) return 0; if(dp[ini][k] != -1) return dp[ini][k]; //cout<<"SOLVE ->>> "<<ini<<" "<<k<<": \n"; for(int mid = ini; mid < n; mid ++) { int custo = (sum[mid] - sum[ini - 1])*( sum[n] - sum[mid] ); int filhos = solve(mid + 1, k - 1); //cout<<mid<<" : "<<custo + filhos<<"\n"; if( filhos + custo > dp[ini][k] ) { dp[ini][k] = filhos + custo; prox[ini][k] = mid; } } return dp[ini][k]; } void print(int ini, int k) { if(!prox[ini][k]) return; cout<<prox[ini][k]<<" "; print(prox[ini][k] + 1, k - 1); } int32_t main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>k; for(int i = 1; i <= n; i++) cin>>v[i], sum[i] = sum[i - 1] + v[i]; memset(dp, -1, sizeof dp); cout<<solve(1, k)<<"\n"; print(1, k); cout<<"\n"; }
#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...