Submission #1357268

#TimeUsernameProblemLanguageResultExecution timeMemory
1357268Muhammad_AneeqPopeala (CEOI16_popeala)C++20
0 / 100
46 ms1520 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
int const N=2e4+10,K=51;
int dp[N][K]={};
int pre[N]={};
int mn[N]={};
int cnt[N]={};
int pr[N]={};
int ind[N]={};
inline void solve()
{
    int n,t,s;
    cin>>n>>t>>s;
    int P[t];
    for (auto& i:P)
        cin>>i;
    string a[n+1];
    for (int i=1;i<=n;i++)
        cin>>a[i];
    for (int i=0;i<=n;i++)
        dp[i][0]=2e9+10;
    dp[0][0]=0;
    for (int i=0;i<t;i++)
        pre[i+1]=pre[i]+P[i];
    for (int k=1;k<=s;k++)
    {
        for (int i=0;i<=t;i++)
            mn[i]=2e9+10;
        mn[k-1]=dp[k-1][k-1]-pre[k-1]*n;
        for (int i=0;i<=n;i++)
            ind[i]=-1;
        ind[s]=k;
        for (int i=k;i<=t;i++)
        for (int i=1;i<=t;i++)
            cnt[i]=n;
        for (int i=1;i<=n;i++)
            pr[i]=k-2;
        for (int i=k;i<=t;i++)
        {
            ind[n]=i;
            for (int j=1;j<=n;j++)
            {
                if (a[j][i-1]=='0')
                {
                    for (int l=pr[j]+1;l<=i;l++)
                    {
                        cnt[l]--;
                        // if (k==2&&cnt[l]==0)
                        //     cout<<l<<' ';
                        ind[cnt[l]]=max(ind[cnt[l]],l);
                        mn[l]=min(mn[l-1],dp[l][k-1]-pre[l]*cnt[l]);
                    }
                    pr[j]=i;
                }
                // cout<<endl;
            }
            int mne=2e9+10;
            for (int j=n;j>=0;j--)
            {
                if (ind[j]==-1) continue;
                // if (k==2)
                //     cout<<i<<' '<<j<<' '<<z<<endl;
                mne=min(mne,mn[ind[j]-1]+pre[i]*j);
            }
            // cout<<i<<' '<<k<<' '<<mne<<endl;
            dp[i][k]=mne;
            mn[i]=min(mn[i-1],dp[i][k-1]-pre[i]*cnt[i]);
        }
    }
    for(int i=1;i<=s;i++)
    {
        cout<<dp[t][i]<<endl;
    }
}
signed main()
{
    ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    int t=1;
    // cin>>t;
    for (int i=1;i<=t;i++)
    {
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...