zoukankan      html  css  js  c++  java
  • Codeforces946D Timetable

    题意:输入n,m,k代表n天,每天m节课,每天要从第一节课待到最后一节课结束,n天一共可以逃k节课,问最少在学校待多久?

    题解:每天逃课节数和n天的上限的最小价值,也就是背包,这里是分组背包,每天逃课的节数作为物品,也就是n组只能选件物品,每天必须选一件

    dp[i][j]代表前i天逃j节课的最小价值

    #include <bits/stdc++.h>
    #define maxn 510
    #define INF 0x3f3f3f3f
    using namespace std;
    int n, m, k, a[maxn], c[maxn][maxn], dp[maxn][maxn];
    char s[maxn];
    int main(){
        scanf("%d%d%d", &n, &m, &k);
        for(int i=1;i<=n;i++){
            scanf("%s", s);
            int num = 0;
            for(int j=0;j<m;j++){
                if(s[j] == '1')
                    a[++num] = j;
            }
            for(int j=0;j<num;j++){
                c[i][j] = a[num]-a[1]+1;
                for(int l=0;l<=j;l++){
                    c[i][j] = min(c[i][j], a[num-j+l]-a[l+1]+1);
                }
            }
            c[i][num] = 0;
        }
        memset(dp, INF, sizeof(dp));
        dp[0][0] = 0;
        for(int i=1;i<=n;i++){
            for(int j=0;j<=k;j++){
                for(int l=0;l<=j;l++){
                    dp[i][j] = min(dp[i][j], dp[i-1][j-l]+c[i][l]);
                }
            }
        }
        printf("%d
    ", dp[n][k]);
        return 0;
    }
  • 相关阅读:
    图论概况
    [NOI2006]最大获利
    Dining
    [USACO5.3]校园网Network of Schools 缩点
    I Hate It
    [USACO06JAN]牛的舞会The Cow Prom Tarjan
    爱在心中
    [HAOI2006]受欢迎的牛
    泥泞的道路
    上白泽慧音
  • 原文地址:https://www.cnblogs.com/Noevon/p/8623194.html
Copyright © 2011-2022 走看看