栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 牛客网之[动态规划 简单]NC3 nico和niconiconi

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 牛客网之[动态规划 简单]NC3 nico和niconiconi

题目的链接在这里:https://www.nowcoder.com/practice/70a03345bae6499ea4338ebc3a0b60e9

目录
  • 题目大意
  • 一、示意图
  • 二、解题思路
    • 字符串加动态规划


题目大意 给定一个字符串 S ,定义三种有价值的字符串: A = "nico" ,B = "niconi" , C = "niconiconi" 其中,字符串 A 的价值为 a, 字符串 B 的价值为 b,字符串 C 的价值为 c 她拿到了一个长度为 n 的字符串,你需要在其中找到一些有价值的子串 (指字符串中连续的一段),并统计价值之和的最大值。 注:已被计算价值过的字符不能重复计算价值!如 "niconico" 要么当作 "nico" + "nico" 计 2a 分,要么当作 "niconi" + "co" 计 b 分(其中 "co" 不计分)。
一、示意图

二、解题思路
字符串加动态规划
字符串加动态规划

代码如下:

import java.util.*;
public class  Main{ 
    public static void main(String[] args){
        //字符串S 不同的字符串有不同的价值
        Scanner sc=new Scanner(System.in);
       
        String[] nums=sc.nextLine().split(" ");
        int n=Integer.parseInt(nums[0]);
        int a=Integer.parseInt(nums[1]);
        int b=Integer.parseInt(nums[2]);
        int c=Integer.parseInt(nums[3]);
        //然后是长度为n的字符串
        String str=sc.nextLine();
        
        //先进行边界判断
        if(n<=3){
            System.out.println(0);
        }
        if(n==4){
            //那就按照4的进行比较
            if(str.equals("nico")){
                System.out.println(a);
            }else{
                System.out.println(0);
            }
        }
        int []dp=new int[n];
        //先进行初始化
        dp[0]=0;
        dp[1]=0;
        dp[2]=0;
        //判断第一个是不是nico subString是左闭右开的
        if(str.substring(0,4).equals("nico")){
            dp[3]=a;
        }else{
            dp[3]=0;
        }

        //然后开始判断
        for(int i=4;i=5&&str.substring(i-5,i+1).equals("niconi")){
                //再进行更新 这里i-6就要成为负数了
                if(i==5){
                    dp[i]=Math.max(dp[i],b);
                }else {
                    dp[i] = Math.max(dp[i], dp[i - 6] + b);
                }
            }
            //再判断和 niconiconi的
            if(i>=10&&str.substring(i-9,i+1).equals("niconiconi")){
                dp[i]=Math.max(dp[i],dp[i-10]+c);
            }
        }
        System.out.println(dp[n-1]);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/357889.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号