【牛客算法周周练7】Rabbit的工作(1)

Rabbit的工作(1)

http://www.nowcoder.com/questionTerminal/f2b1d32e20294180a9f47fd782408c41





















#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 405;
int dp[2][N][N];//dp(i,j,k)表示前i天工作了j天且已经连续工作了k天花费的最小体力值
char s[N];
int n,m;
int main(){
    scanf("%d%d",&n,&m);
    scanf("%s",s + 1);
    memset(dp,0x3f,sizeof(dp));
    dp[0][0][0] = 0;
    for(int i = 1;i <= n;i++){
        for(int j = 0;j <= i;j++){
            dp[i & 1][j][0] = dp[i-1 & 1][j][0];
            for(int k = 1;k <= j;k++){
                dp[i & 1][j][0] = min(dp[i & 1][j][0],dp[i-1 & 1][j][k]);
                if(s[i] == '1'){
                    dp[i & 1][j][k] = min(dp[i & 1][j][k],dp[i-1&1][j-1][k-1] +k);
                }
            }
        }
    } 
    for(int i = n;i >= 0;i--){
        for(int j = 0;j <= i;j++){
            if(dp[n & 1][i][j] <= m){
                printf("%d\n",i);
                return 0;
            }
        }
    }
    return 0;
} 
全部评论

相关推荐

点赞 评论 收藏
分享
10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
评论
3
收藏
分享
牛客网
牛客企业服务