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...