牛客——动态规划专项

NC1 连续子数组最大和(ACM版本)

连续子数组最大和(ACM版本)_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/1718131e719746e9a56fb29c40cc8f95?tpId=230&tqId=2225856&ru=/activity/oj&qru=/ta/dynamic-programming/question-ranking

解析:注意一下,数据范围

#include <stdio.h>
#include <stdlib.h>

int main(){
    int n, a[100005];
    long long int sum[100005] = {0};
    scanf("%d", &n);
    for(int i = 0; i < n; i++){
        scanf("%d", &a[i]);
    }
    sum[0] = a[0];
    for(int i = 1; i < n; i++){
        if(a[i] <= sum[i-1] + a[i]){
            sum[i] = sum[i-1] + a[i];
        }else{
            sum[i] = a[i];
        }
    }
    long long int max = -9999;
    for(int i = 0; i < n; i++){
        if(max < sum[i]){
            max = sum[i];
        }
    }
    printf("%lld", max);
    return 0;
}

NC2 不相邻取数

不相邻取数_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力icon-default.png?t=LA92https://www.nowcoder.com/practice/a2be806a0e5747a088670f5dc62cfa1e?tpId=230&tags=&title=&difficulty=0&judgeStatus=0&rp=0

#include <stdio.h>
#include <stdlib.h>
long long int max(long long int a, long long int b){
    return a>b?a:b;
}
int main(){
    int n;
    long long int a[100005], sum[100005];
    long long int Max = 0;
    scanf("%d", &n);
    for(int i = 0; i < n; i++){
        scanf("%lld", &a[i]);
    }
    sum[0] = a[0];
    sum[1] = max(a[0], a[1]);
    for(int i = 2; i < n; i++){
        sum[i] = max(sum[i-1], sum[i-2] + a[i]);
        if(sum[i] > Max){
            Max = sum[i];
        }
    }
    printf("%lld", Max);
    return 0;
}

NC3 nico和niconiconi

nico和niconiconi_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力icon-default.png?t=LA92https://www.nowcoder.com/practice/70a03345bae6499ea4338ebc3a0b60e9?tpId=230&tags=&title=&difficulty=0&judgeStatus=0&rp=0

#include <stdio.h>
#include <stdlib.h>
typedef long long int ll;
ll max(ll a, ll b){
    return a>b?a:b;
}
int main(){
    int n;
    long long int a, b, c;
    scanf("%d %lld %lld %lld", &n, &a, &b, &c);
    char str[300005];
    scanf("%s", str);
    char a_str[] = "nico", b_str[] = "niconi", c_str[] = "niconiconi";
    long long int dp[300005] = {0}, Max = 0;
    int j;
    for(int i = 0; i < n; i++){
        if(dp[i] == 0){
            dp[i] = Max;
        }
        
        for(j = 0; j <= 3 && i + j < n; j++){
            if(str[i + j] != a_str[j]){
                break;
            }
        }
       
        if(j == 4){
            j--;
            dp[i + j] = max(dp[i + j], dp[i] + a);
        }
        
        
        for(j = 0; j <= 5&& i + j < n; j++){
            if(str[i + j] != b_str[j]){
                break;
            }
        }
        if(j == 6){
            j--;
            dp[i + j] = max(dp[i+ j],dp[i] + b);
        }
        
        
        
        for(j = 0; j <= 9&& i + j < n; j++){
            if(str[i + j] != c_str[j]){
                break;
            }
        }
        if(j == 10){
            j--;
            dp[i + j] = max(dp[i] + c, dp[i + j]);
        }
        
        
        if(Max < dp[i]){
            Max = dp[i];
        }
        
    }
    
    printf("%lld", Max);
    return 0;
}

NC4 【模板】前缀和

【模板】前缀和_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力icon-default.png?t=LA92https://www.nowcoder.com/practice/acead2f4c28c401889915da98ecdc6bf?tpId=230&tags=&title=&difficulty=0&judgeStatus=0&rp=0

#include <stdio.h>
#include <stdlib.h>
typedef long long int ll;
ll max(ll a, ll b){
    return a>b?a:b;
}
int main(){
    int n, q;
    scanf("%d %d", &n, &q);
    ll a, sum[100005];
    for(int i = 1; i <= n; i++){
        scanf("%lld", &a);
        sum[i] = sum[i-1] + a;
    }
    int l, r;
    while(q--){
        scanf("%d %d", &l, &r);
        printf("%lld\n", sum[r] - sum[l-1]);
    }
    return 0;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z6q6k6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值