#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll nx=55, tx=2e4+5, inf=1e18;
ll n, t, s, qs[tx], dp[nx][tx], mn[nx], lst[tx][nx];
char c;
int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>n>>t>>s;
    for (int i=1; i<=t; i++) cin>>qs[i], qs[i]+=qs[i-1];
    for (int i=1; i<=n; i++)
    {
        for (int j=1; j<=t; j++)
        {
            cin>>c;
            if (c=='1') lst[j][i]=lst[j-1][i];
            else lst[j][i]=j;
        }
    }
    for (int i=1; i<=t; i++) lst[i][0]=i, sort(lst[i], lst[i]+n+1);
    for (int i=0; i<=s; i++) for (int j=0; j<=t; j++) dp[i][j]=inf;
    dp[0][0]=0;
    for (int i=1; i<=s; i++)
    {
        for (int j=0; j<=n; j++) mn[j]=inf;
        for (int j=1; j<=t; j++)
        {
            for (int k=0; k<=n; k++)
            {
                for (int idx=lst[j-1][k]; idx<lst[j][k]; idx++) mn[k]=min(mn[k], dp[i-1][idx]-k*qs[idx]);
                dp[i][j]=min(dp[i][j], mn[k]+qs[j]*k);
            }
            //cout<<"debug "<<i<<' '<<j<<' '<<dp[i][j]<<'\n';
        }
        cout<<dp[i][t]<<'\n';
    }
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |