Submission #1180695

#TimeUsernameProblemLanguageResultExecution timeMemory
1180695alexddPopeala (CEOI16_popeala)C++20
100 / 100
1101 ms17516 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int INF = 1e18; int n,t,s; int points[20005],pref[20005]; int tole[55][20005]; int dp[20005][2]; int dp_coef[20005][55]; signed main() { ios_base::sync_with_stdio(0);cin.tie(0); cin>>n>>t>>s; for(int i=1;i<=t;i++) { cin>>points[i]; pref[i] = pref[i-1] + points[i]; } for(int i=1;i<=n;i++) { char ch; int ult=0; for(int j=1;j<=t;j++) { cin>>ch; if(ch=='0') ult=j; tole[i][j] = ult; } } for(int i=1;i<=t;i++) dp[i][0] = INF; for(int cnt=1;cnt<=s;cnt++) { for(int coef=0;coef<=n;coef++) dp_coef[0][coef] = dp[0][1-cnt%2] - pref[0]*coef; for(int i=1;i<=t;i++) for(int coef=0;coef<=n;coef++) dp_coef[i][coef] = min(dp_coef[i-1][coef], dp[i][1-cnt%2] - pref[i]*coef); dp[0][cnt%2] = INF; for(int i=1;i<=t;i++) { vector<int> aux; for(int j=1;j<=n;j++) aux.push_back(tole[j][i]); aux.push_back(0); aux.push_back(i); sort(aux.begin(),aux.end()); reverse(aux.begin(),aux.end()); dp[i][cnt%2] = INF; for(int j=1;j<aux.size();j++) { if(aux[j]==aux[j-1]) continue; //for(int u=0;u<aux[j-1];u++) dp[i][cnt%2] = min(dp[i][cnt%2], dp[u][1-cnt%2] + (pref[i] - pref[u]) * (n - j + 1)); if(aux[j-1]-1>=0) dp[i][cnt%2] = min(dp[i][cnt%2], dp_coef[aux[j-1]-1][n-j+1] + pref[i] * (n - j + 1)); } //cout<<i<<" "<<cnt<<" "<<dp[i][cnt]<<"\n"; } cout<<dp[t][cnt%2]<<"\n"; } 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...