제출 #1278274

#제출 시각아이디문제언어결과실행 시간메모리
1278274zagaro수열 (APIO14_sequence)C++20
0 / 100
1 ms340 KiB
#include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> /**zagaro & lauren <3**/ #define mod 1000000007 //1e9 + 7 #define pi acos(-1) #define wl while #define str string #define ENDL "\n" #define sal ' ' #define tp_set ll #define prc(n) cout.precision(n);cout<<fixed; #define ord_set tree<tp_set, null_type, less<tp_set>, rb_tree_tag, tree_order_statistics_node_update> typedef long long ll; typedef bool bl; typedef char car; using namespace std; using namespace __gnu_pbds; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n, k, a, b, r=0; cin>>n>>k; vector<ll> vec(n+1, 0); vector<ll> prf(n+1, 0); vector<vector<ll> > dp(n+1, vector<ll> (k+1, LONG_LONG_MIN)); vector<vector<ll> > vic(n+1, vector<ll> (k+1, 0)); vector<vector<pair<ll,ll> > > pos(n+1, vector<pair<ll,ll> > (k+1)); for(int i=1;i<=n;i++){ cin>>vec[i]; prf[i] = prf[i-1] + vec[i]; dp[i][0] = 0; } dp[0][0] = 0; for(int i=1;i<=n;i++){ for(int j=1;j<=k;j++){ a = dp[i-1][j-1]+vec[i]*(prf[n]-prf[i]); b = dp[i-1][j]+vec[i]*(prf[n]-prf[i]-vic[i-1][j]); if(a >= b){ dp[i][j] = a; vic[i][j] = vec[i]; pos[i][j] = {i-1, j-1}; } else { dp[i][j] = b; vic[i][j] = vic[i-1][j]+vec[i]; pos[i][j] = {i-1, j}; } } } for(int i=1;i<=n;i++){ if(dp[i][k] > r){ r = dp[i][k]; a = i; } } b=k; cout<<r<<ENDL; vector<bl> vis(k+1, false); vis[0] = true; wl(b != 0){ if(!vis[b]){ cout<<a<<sal; vis[b] = true; } tie(a, b) = pos[a][b]; } cout<<ENDL; return 0; }
#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...