牛客练习记录第五周

本文记录了牛客网上六道编程练习题,包括题目描述、输入输出说明及解题思路,涉及最大子段和、字符串处理、回文子串、货物装载等多个算法问题。
摘要由CSDN通过智能技术生成

第一题:链接:https://www.nowcoder.com/questionTerminal/824af5cb05794606b56657bb3fa91f49

编程题]善变的同伴

又到了吃午饭的时间,你和你的同伴刚刚研发出了最新的GSS-483型自动打饭机器人,现在你们正在对机器人进行功能测试。

为了简化问题,我们假设午饭一共有N个菜,对于第i个菜,你和你的同伴对其定义了一个好吃程度(或难吃程度,如果是负数的话……)A[i],

由于一些技(经)术(费)限制,机器人一次只能接受一个指令:两个数L, R——表示机器人将会去打第L~R一共R-L+1个菜。

本着不浪费的原则,你们决定机器人打上来的菜,含着泪也要都吃完,于是你们希望机器人打的菜的好吃程度之和最大

然而,你善变的同伴希望对机器人进行多次测试(实际上可能是为了多吃到好吃的菜),他想知道机器人打M次菜能达到的最大的好吃程度之和

当然,打过一次的菜是不能再打的,而且你也可以对机器人输入-1, -1,表示一个菜也不打

 

输入描述:

第一行:N, M

第二行:A[1], A[2], ..., A[N]


 

输出描述:

一个数字S,表示M次打菜的最大好吃程度之和

示例1

输入

7 2
1 2 3 -2 3 -10 3

输出

10

说明

[1 2 3 -2 3] -10 [3]

示例2

输入

7 4
1 2 3 -2 3 -10 3

输出

12

说明

[1 2 3] -2 [3] -10 [3]

第四次给机器人-1, -1的指令

 

备注:

N <= 10^5 = 100000

|A[i]| <= 10^4 = 10000

10%数据M = 1

50%数据M <= 2

80%数据M <= 100

100%数据M <= 10^4 = 10000

解题思路:最大m子段合,可以参考https://blog.csdn.net/winter2121/article/details/72848482

#include<iostream>
#include<algorithm>
#include<string>
#include<math.h>
#include<stdlib.h>
#include <iostream>
#include <vector>
#include <queue>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<stack>
#include<iostream>
#include<set>
#include<map>
using namespace std;

vector<int>ss;
int dp[2][100005]={0};
int main()
{
    int N, M,sum,h,  k, count, now; //N表示菜的个数,M表示机器人最多打菜的次数,cout表示菜的总的好吃度,now表示当前这道菜的好吃度
    cin >> N >> M;
       
    count = 0; 
    while (N--) {
        cin >> now;  //输入菜的好吃程度
        if (count>0) {  //总的好吃度为正时
            if (now >= 0)  //好吃度为正,累加好吃度
                count += now;
            else {
                ss.push_back(count);   //好吃度为负,把之前总的好吃度存下来,并更新总的好吃度
                count = now;
            }
        }
          
        else if (count<0) {  //总的好吃度为负数时
            if (now >= 0) {
                    ss.push_back(count);  //当前好吃度为正,把之前总的好吃度存下来,并更新总的好吃度
                count = now;
            }
            else
                count += now;   //好吃度为负,累加好吃度
        }
          
        else
            count += now;   //总的好吃度为0时,累加好吃度
    }
      
    if (count>0)   //完成数据输入后,总的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值