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