Submission #1180686

#TimeUsernameProblemLanguageResultExecution timeMemory
1180686alexddPopeala (CEOI16_popeala)C++20
17 / 100
2096 ms2224 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++)
            {
                if(aux[j]==aux[j-1])
                    continue;

                for(int u=0;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...