编程题

01串题目描述

自从学习了计算机编程,小明就彻底爱上了0和1,很多01串经常在他脑子里面浮现。但是他从小就害怕警察,星然他并没有犯过啥大错误,最多就是在小花的新衣服上画朵小花,在小红的白裙子上点上几个小红点……所以他很害怕110。
现在给你一个01串,请你编写一个程序计算在这个01串中不包含110的最长子串的长度。

输入描述

输入一行,包含一个01串5(在S中只包含0和1,有可能输入全为0或者1的串),其长度 1≤1S1≤1000000。

输出描述

输出01串S中不包含110的最长子串的长度。

样例输入

1101010110010110

样例输出

8

提示

在样例中,第2个字符到第9个字符组成的子串10101011为不包含110的最长子串,其长度为8。

代码完成

100% 完成度

#include<iostream>
#include<string>
#include<algorithm>


int maxLength(const std::string& str){
    int maxLen = 0;
    int currentLength = 0;
    
    if (str.size() < 3) {
        return str.size();
    }
    for (int i = 0; i < str.size(); i++) {
        if (i < str.size() - 2 && str.substr(i,3) == "110") {
            maxLen = std::max(maxLen, currentLength);
            // std::cout << "len[" << i << "] = " << maxLen << std::endl;
            currentLength = 2;
        } else {
            currentLength++;
            // std::cout << "current[" << i << "] = " << currentLength << std::endl;
        }
    }
    
    return std::max(maxLen,currentLength);
}


int main() {
    std::string input;
    std::cin >> input;
    int result = maxLength(input);
    std::cout << result << std::endl;
    return 0;
}

小A组做作业题目描述

即将进入假期的小A打算做很多作业,因为小A每天的心情不同,所以他每天可以做的作业数量可能不同。聪明的小A知道一直做作业是对身体不好的,所以需要他给自己制订一份芳逸结合的假期作业计划,也就是在每次做作业后都需要休息1天或2天(不能不休息,也不能休息大于2天),再继续做作业。
爱学习的小A决定在假期的第1天或第2天开始做作业,那么他在假期内最多能做多少作业?

输入描述

第一行有1个正整数n,表示假期的天数;
第二行有n个正整数ai,表示小A每天能完成的作业数。
1 ≤ n ≤ 10000, 0 ≤ ai ≤ 10000

输出描述

输出一行一个整数,表示小A在假期内最多能做的作业数

样例输入

5
2 1 2 1 2

样例输出

6

提示

小A选择在第1、3、5天做作业,一共能完成的作业数为6

代码完成

100% 完成度

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int totaldays;
    int num, result;
    std::cin >> totaldays;
    vector<int> arrs;
    vector<int> dp(totaldays + 1);
    
    // std::cout << "total = " << totaldays << endl;
    
    for (int i = 0; i < totaldays; i++) {
        std::cin >> num;
        arrs.push_back(num);
    }
    // for (int i = 0; i < totaldays; i++) {
    //     std::cout << arrs[i] << endl;
    // }
    dp[0] = 0;
    dp[1] = arrs[0];
    dp[2] = std::max(dp[1], arrs[1]);
    
    for (int i = 3; i <= totaldays; ++i) {
        dp[i] = std::max(dp[i - 1], dp[i - 2] + arrs[i - 1]);
        // std::cout << "dp[" << i << "] = " << dp[i] <<endl;
    }
    // std::cout << "total = " << totaldays << endl;
    std::cout << dp[totaldays] << endl;
    return 0;
}

Q.E.D.