十三届蓝桥杯-c组-最大不下降子序列

题目详情

【问题描述】

给定一个长度为 N 的整数序列:A1, A2, · · · , AN。现在你有一次机会,
将其 中连续的 K 个数修改成任意一个相同值。请你计算如何修改可以
使修改后的数 列的最长不下降子序列最长,请输出这个最长的长度。
最长不下降子序列是指序列中的一个子序列,子序列中的每个数不小于在它之前的数。

【输入格式】

    输入第一行包含两个整数 N 和 K。
    第二行包含 N 个整数 A1, A2, · · · , AN。

【样例输入】

	5 1
	1 4 2 8 5

【样例输出】

	4

解题思路

因本人比较菜,动态规划有点玩不明白,所以在此出了一种不需要动态规划,也不要需要找状态转移方程的方法
首先我们要定义两个int类型的变量,用来存放N和K

static int n,k;

接下来定义两个数组,一个为int型,一个为Boolean型,作用介绍在代码里:

static int[] arr;//用来存放所输入的数字
static boolean[] c;//用来判断所输入的数组两个值之间的递增关系;是了为true;否之为false

我们变量命名好之后,接着就该给变量赋值,这里我要引用到java.until.Scanner包(及从键盘获取输入的一个包)复制代码如下:

Scanner scan = new Scanner(System.in);
n=scan.nextInt();//获取样例输入的第一行
k=scan.nextInt();//n,k分别为数组的长度和我们所需要调整的数字个数
for (int i = 0; i < n; i++) {
   
     arr[i]= scan.nextInt();
  }//从键盘获取输入样例的第二行

我们引入数值后,就可以给我们的Boolean数组赋值,代码如下

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值