zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 39 (Rated for Div. 2)D. Timetable

    题目链接:D. Timetable

    题解:预处理然后分组背包a[i][j]表示第i天翘掉j节课可以不去学校的时间,预处理出a[][]数组之后,就是容量为k,对着n天进行分组背包 dp[i]表示旷i节课可以不去学校的时间

     1 #include<bits/stdc++.h>
     2 #include<set>
     3 #include<cstdio>
     4 #include<iomanip>
     5 #include<iostream>
     6 #include<string>
     7 #include<cstring>
     8 #include<algorithm>
     9 #define pb push_back
    10 #define ll long long
    11 #define fi first
    12 #define se second
    13 #define PI 3.14159265
    14 #define ls l,m,rt<<1
    15 #define rs m+1,r,rt<<1|1
    16 #define eps 1e-7
    17 #define pii pair<int,int>
    18 typedef unsigned long long ull;
    19 const int mod=1e3+5;
    20 const ll inf=0x3f3f3f3f3f3f3f;
    21 const int maxn=5e2+5;
    22 using namespace std;
    23 int n,m,cnt,k;
    24 string s;
    25 int pos[maxn][maxn],a[maxn][maxn],num[maxn],dp[maxn];
    26 int main()
    27 {
    28     ios::sync_with_stdio(false);
    29     cin.tie(0);cout.tie(0);
    30     cin>>n>>m>>k;
    31     for(int i=1;i<=n;i++)
    32     {
    33         cin>>s;
    34         for(int j=0;j<s.size();j++)
    35         {
    36             if(s[j]=='1')
    37             {
    38                 pos[i][++num[i]]=j;
    39             }
    40         }
    41     }
    42 //    for(int i=1;i<=n;i++)
    43 //    {
    44 //        for(int j=0;j<=num[i];j++)
    45 //        {
    46 //            cout<<pos[i][j]<<" ";
    47 //        }cout<<endl;
    48 //    }
    49     for(int i=1;i<=n;i++)
    50     {
    51         if(num[i]==0)
    52         {
    53             a[i][0]=m;
    54         }
    55         else
    56         for(int j=0;j<=k&&j<=num[i];j++)
    57         {
    58             for(int l=0;l<=j;l++)
    59             {
    60              //   cout<<i<<"SSS"<<l<<" "<<pos[i][l+1]<<" "<<" "<<m-1-pos[i][num[i]-(j-l)]<<endl;
    61                 if(j<num[i])a[i][j]=max(a[i][j],m-1-pos[i][num[i]-(j-l)]+pos[i][l+1]);
    62                 else a[i][j]=m;
    63             }
    64         }
    65     }
    66 //    for(int i=1;i<=n;i++)
    67 //    {
    68 //        for(int j=0;j<=num[i];j++)
    69 //        {
    70 //            cout<<a[i][j]<<" ";
    71 //        }cout<<endl;
    72 //    }
    73     for(int i=1;i<=n;i++)
    74     {
    75         for(int j=k;j>=0;j--)
    76         {
    77             for(int l=0;l<=num[i];l++)
    78             {
    79                 if(j>=l)dp[j]=max(dp[j],dp[j-l]+a[i][l]);
    80             }
    81         }
    82     }
    83     cout<<n*m-dp[k]<<endl;
    84     return 0;
    85 }
    View Code
  • 相关阅读:
    MySql创建库 Challenge
    未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值的解决办法.
    小总结:用反射机制创建的分配数据分配器
    工厂模式的反思
    单机安装“完整”SharePoint 2010
    作业调度框架 Quartz.NET 2.0 StepByStep(2)
    UI线程同步
    每日见闻(一)
    作业调度框架 Quartz.NET 2.0 StepByStep
    基础算法(ACwing)
  • 原文地址:https://www.cnblogs.com/lhclqslove/p/9335235.html
Copyright © 2011-2022 走看看