Submission #1180674

#TimeUsernameProblemLanguageResultExecution timeMemory
1180674alexdd조교 (CEOI16_popeala)C++20
26 / 100
2096 ms7560 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<pair<int,int>> aux;
        for(int j=1;j<=n;j++)
            aux.push_back({tole[j][i], j});
        aux.push_back({0,-1});
        aux.push_back({i,INF});
        sort(aux.begin(),aux.end());

        dp[i][0] = INF;
        for(int cnt=1;cnt<=s;cnt++)
        {
            dp[i][cnt] = INF;
            for(int j=(int)aux.size()-1;j>0;j--)
            {
                for(int u=aux[j-1].first;u<aux[j].first;u++)
                    dp[i][cnt] = min(dp[i][cnt], dp[u][cnt-1] + (pref[i] - pref[u]) * (n - ((int)aux.size() - 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...