제출 #1180677

#제출 시각아이디문제언어결과실행 시간메모리
1180677alexdd조교 (CEOI16_popeala)C++20
26 / 100
2096 ms7684 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][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 cnt=1;cnt<=s;cnt++) dp[0][cnt]=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][0] = INF; for(int cnt=1;cnt<=s;cnt++) { dp[i][cnt] = INF; for(int j=1;j<aux.size();j++) { for(int u=aux[j];u<aux[j-1];u++) dp[i][cnt] = min(dp[i][cnt], dp[u][cnt-1] + (pref[i] - pref[u]) * (n - j + 1)); } //cout<<i<<" "<<cnt<<" "<<dp[i][cnt]<<"\n"; } } for(int i=1;i<=s;i++) cout<<dp[t][i]<<"\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...