日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

D. Timetable

發布時間:2023/12/13 综合教程 39 生活家
生活随笔 收集整理的這篇文章主要介紹了 D. Timetable 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://codeforces.com/problemset/problem/946/D

Ivan is a student at Berland State University (BSU). There arendays in Berland week, and each of these days Ivan might have some classes at the university.

There aremworking hours during each Berland day, and each lesson at the university lasts exactly one hour. If at some day Ivan's first lesson is duringi-th hour, and last lesson is duringj-th hour, then he spendsj?-?i?+?1hours in the university during this day. If there are no lessons during some day, then Ivan stays at home and therefore spends0hours in the university.

Ivan doesn't like to spend a lot of time in the university, so he has decided to skip some lessons. He cannot skip more thanklessons during the week. After deciding which lessons he should skip and which he should attend, every day Ivan will enter the university right before the start of the first lesson he does not skip, and leave it after the end of the last lesson he decides to attend. If Ivan skips all lessons during some day, he doesn't go to the university that day at all.

Givenn,m,kand Ivan's timetable, can you determine the minimum number of hours he has to spend in the university during one week, if he cannot skip more thanklessons?

Input

The first line contains three integersn,mandk(1?≤?n,?m?≤?500,0?≤?k?≤?500) — the number of days in the Berland week, the number of working hours during each day, and the number of lessons Ivan can skip, respectively.

Thennlines follow,i-th line containing a binary string ofmcharacters. Ifj-th character ini-th line is1, then Ivan has a lesson oni-th day duringj-th hour (if it is0, there is no such lesson).

Output

Print the minimum number of hours Ivan has to spend in the university during the week if he skips not more thanklessons.

Examples

input
Copy

2 5 1
01001
10110

output

5

input
Copy

2 5 0
01001
10110

output

8

Note

In the first example Ivan can skip any of two lessons during the first day, so he spends1hour during the first day and4hours during the second day.

In the second example Ivan can't skip any lessons, so he spends4hours every day.

// 去吧!皮卡丘! 把AC帶回來!
//      へ     /|
//   /\7    ∠_/
//   / │   / /
//  │ Z _,< /   /`ヽ
//  │     ヽ   /  〉
//  Y     `  /  /
//  ?● ? ●  ??〈  /
//  ()  へ    | \〈
//   >? ?_  ィ  │ //
//   / へ   / ?<| \\
//   ヽ_?  (_/  │//
//    7       |/
//    >―r ̄ ̄`?―_
//**************************************
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define inf 2147483647
const ll INF = 0x3f3f3f3f3f3f3f3fll;
#define ri register int
template <class T> inline T min(T a, T b, T c) { return min(min(a, b), c); }
template <class T> inline T max(T a, T b, T c) { return max(max(a, b), c); }
template <class T> inline T min(T a, T b, T c, T d) {
  return min(min(a, b), min(c, d));
}
template <class T> inline T max(T a, T b, T c, T d) {
  return max(max(a, b), max(c, d));
}
#define pi acos(-1)
#define mem(x, y) memset(x, y, sizeof(x));
#define For(i, a, b) for (int i = a; i <= b; i++)
#define FFor(i, a, b) for (int i = a; i >= b; i--)
#define bug printf("***********
");
#define mp make_pair
#define pb push_back
const int maxn = 3e5 + 10;
// name*******************************
int n, m;
int a[505][505];
int K;
int kk[505][505];//kk[i][j]記錄第i行刪掉j個的最小代價,為后面dp服務
int dp[505][505];//dp[i][j]:前i行,共刪掉j個所獲最下代價
int cnt[505];//記錄每組的1的個數
int sum=0;  //sum這里記錄下1的總個數,若K大于sum,直接輸出0
// function******************************

//***************************************
int main() {
  // ios::sync_with_stdio(0); cin.tie(0);
  // freopen("test.txt", "r", stdin);
  //  freopen("outout.txt","w",stdout);
  cin >> n >> m >> K;
  me(dp, 127);
  me(kk, 127);
  For(i, 1, n) {
    For(j, 1, m) {
      int x;
      scanf("%1d", &x);//限寬輸入
      if (x) {
        a[i][++cnt[i]] = j;
      }
    }
    //選定j,k為起始終止點
    For(j, 1, cnt[i]) {
      For(k, j, cnt[i]) {
        kk[i][(j - 1) + cnt[i] - k] =
            min(kk[i][(j - 1) + cnt[i] - k], a[i][k] - a[i][j] + 1);
      }
    }
    kk[i][cnt[i]] = 0;
    sum+=cnt[i];
  }
if(K>=sum){
  cout<<0;
  return 0;
}
  For(i, 0, min(K, cnt[1])) {
    dp[1][i] = kk[1][i];
  }
  For(i, 2, n) {
    For(j, 0, K) {
      For(k, 0, min(j,cnt[i])) {
        dp[i][j] = min(dp[i][j], dp[i - 1][j - k] + kk[i][k]);
      }
    }
  }
  cout << dp[n][K];

  return 0;
}

總結

以上是生活随笔為你收集整理的D. Timetable的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。