zoukankan      html  css  js  c++  java
  • 牛客练习赛36B

    唔在cf上做过,A题也做过,神仙说D题也是原题

    这个题就是dp了。然后数组滚动一下,很显然能住遇到  i 只与 i-1 有关,所以还是挺好滚的。

    dp[i][j][k]表示到第I 天一共工作了J天连续工作了K天还剩的  体力值。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 int n,k;
     5 string s;
     6 int dp[2][401][401];
     7 int main(){
     8     ios::sync_with_stdio(false);
     9     cin>>n>>k>>s;
    10     s="*"+s;
    11     memset(dp,-1, sizeof(dp));
    12     dp[0&1][0][0]=k;
    13     for(int i=1;i<=n;i++){
    14         dp[i&1][0][0]= k;
    15         if(s[i]=='0'){
    16             for(int j=0;j<=i;j++){
    17                 for(int k=0;k<=j;k++) {
    18                     dp[i&1][j][0] = max(dp[i&1][j][0], dp[(i-1)&1][j][k]);
    19                 }
    20             }
    21         } else{
    22             //不工作
    23             for(int j=0;j<=i;j++){
    24                 for(int k=0;k<=j;k++) {
    25                     dp[i&1][j][0] = max(dp[i&1][j][0], dp[(i-1)&1][j][k]);
    26                 }
    27             }
    28             //工作
    29             for(int j=1;j<=i;j++){
    30                 for(int k=0;k<=j;k++) {
    31                     dp[i&1][j][k+1] = max(dp[i&1][j][k+1], dp[(i-1)&1][j-1][k]-1-k);
    32                 }
    33             }
    34         }
    35     }
    36     int ans = 0;
    37     for(int j=0;j<=n;j++){
    38         for(int k=0;k<=j;k++){
    39             if(dp[n&1][j][k]>=0){
    40                 ans = max(ans,j);
    41             }
    42         }
    43     }
    44     cout<<ans<<endl;
    45 }
    View Code
  • 相关阅读:
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业03--树
    DS博客作业02--栈和队列
    C博客作业05-指针
    C语言——数组博客作业
    c语言博客3—函数
    循环结构博客
    c语言博客,顺序与分支结构
    Java面向对象课程设计——购物车
  • 原文地址:https://www.cnblogs.com/MXang/p/10224662.html
Copyright © 2011-2022 走看看