#include <bits/stdc++.h>
using namespace std;
const int N = 2e4+30;
short r[N][N];
short gh[57][57];
#define int long long
int dis[N][55];
void solve(){
int n, t, s; cin >> n >> t >> s;
vector<int> v(t);
for(int i=0; i<=t; i++){
for(int l=0; l<=s; l++){
dis[i][l] = 1e10;
}
}
for(auto &i: v) cin >> i;
vector<string> se(n);
for(auto &i: se){
cin >> i;
int k=i[0]-'0';
for(int l=1; l<t; l++){
if(i[l]=='0'){
if(k)
for(int j=l-k; j<l; j++){
for(int g=j; g<l; g++){
r[j][g]++;
}
}
k=0;
}
else k++;
}
if(k){
for(int j=t-k; j<t; j++){
for(int g=j; g<t; g++){
r[j][g]++;
}
}
}
}
for(int i=1; i<t; i++) v[i] += v[i-1];
int h=0;
for(int i=0; i<55; i++){
for(int l=0; l<55; l++){
gh[i][l]=-1;
}
}
// assert((h < 55*t));
gh[0][0]=0;
dis[0][0]=0;
auto calc=[&](int ri, int l, int s){
if(dis[l][s]==(int)1e10) return (int)1e10;
int h = dis[l][s];
int gh = v[ri];
if(l) gh-=v[l-1];
int kac = r[l][ri];
return h+kac*gh;
};
vector<short> upd;
for(int i=0; i<=t; i++){
//hah;
for(int j=0; j<50; j++){
for(int el=0; el<=50; el++){
if(gh[j][el]!=-1){
if(i!=0)
dis[i][j+1] = min(dis[i][j+1], calc(i-1, gh[j][el], j));
}
}
}
if(i!=t)
for(int l=0; l<n; l++){
if(se[l][i]=='0'){
for(int j=i-1; j>=0; j--){
if(se[l][j]=='0') break;
upd.push_back(j);
}
}
}
if(i<t)
upd.push_back(i);
if(i<t)
for(auto l: upd){
if(l<0) continue;
int el = r[l][i];// kaç tane
for(int k=0; k<s; k++){
if(gh[k][el]==-1) gh[k][el]=l;
else{
int val_new = calc(i, l, k);
int val_old = calc(i, gh[k][el], k);
if(val_new < val_old){
gh[k][el] = l;
}
}
}
}
upd.clear();
}
for(int i=1; i<=s; i++) cout<<dis[t][i]<<"\n";
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
/*freopen("popeala.in", "r", stdin);
freopen("popeala.out", "w", stdout);
*/
solve();
}
Compilation message
popeala.cpp: In function 'void solve()':
popeala.cpp:53:9: warning: unused variable 'h' [-Wunused-variable]
53 | int h=0;
| ^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
2392 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
23132 KB |
Output is correct |
2 |
Correct |
10 ms |
23244 KB |
Output is correct |
3 |
Correct |
10 ms |
23128 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
52 ms |
90972 KB |
Output is correct |
2 |
Correct |
64 ms |
108888 KB |
Output is correct |
3 |
Correct |
89 ms |
114772 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
2392 KB |
Output is correct |
2 |
Correct |
1 ms |
2396 KB |
Output is correct |
3 |
Correct |
10 ms |
23132 KB |
Output is correct |
4 |
Correct |
10 ms |
23244 KB |
Output is correct |
5 |
Correct |
10 ms |
23128 KB |
Output is correct |
6 |
Correct |
52 ms |
90972 KB |
Output is correct |
7 |
Correct |
64 ms |
108888 KB |
Output is correct |
8 |
Correct |
89 ms |
114772 KB |
Output is correct |
9 |
Correct |
218 ms |
136964 KB |
Output is correct |
10 |
Correct |
273 ms |
165668 KB |
Output is correct |
11 |
Runtime error |
302 ms |
262144 KB |
Execution killed with signal 9 |
12 |
Halted |
0 ms |
0 KB |
- |