蓝桥杯——数组切分

数组切分

题目分析

这里要搞清楚一个点就是满足区间内数字是连续数字的区间有什么样的特点,既然数字连续重新排列后的数字为n,n+1,n+2,n+3,n+4,...n+len,则最大数字和最小数字之差恰好是区间长度减1,即n+len-n=len,同样因为下标也是连续数字,那么左端点和右端点的下标之差也是区间长度减1,所以最大数字和最小数字之差恰好是左端点和右端点的下标之差。

定义dpi表示以ai结尾的区间能够被划分的区间的个数,那么dpi可以从 d p j − 1 ( j < i ) dpj-1(j<i) dpj−1(j<i)转移过来的条件是aj~ai这个区间是一个连续区间。

题目代码

java 复制代码
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    int a[] = new int[n+1];
    int mod = 1000000007;
    for (int i = 1; i < a.length; i++) {
        a[i] = scanner.nextInt();
    }
    int dp[] = new int[n+1];
    dp[0] = 1;
    for (int i = 1; i < dp.length; i++) {
        int max = a[i];
        int min = a[i];
        for (int j = i; j > 0; j--) {
            max = Math.max(a[j], max);
            min = Math.min(a[j], min);
            if(max-min==i-j) {
                dp[i] = (dp[i] + dp[j-1])%mod;
            }
        }
    }
    System.out.println(dp[n]);
}
}
相关推荐
sanjiaomao3339 分钟前
从论文公式到Python实现:用单元测试校验滑动平均算法
python·算法·单元测试
乐迪信息23 分钟前
如何通过AI防爆摄像机精准判断船舶超速?
大数据·人工智能·算法·安全·目标跟踪
小荷才露尖尖角,早有蜻蜓立上头1 小时前
过滤器的4种创建方式
java
大圣编蚕1 小时前
Java ByteArrayInputStream 详解:从入门到实战
java·开发语言·算法
程序员阿明1 小时前
idea把插件啥的不默认放在C盘
java·ide·intellij-idea
linweidong2 小时前
中科闻歌Java面试题及参考答案
java·python·大模型·提示词·ai agent·mcp·rag原理
OpenAnolis小助手2 小时前
一句话看透 JVM,SysOM 诊断 Skill 新增 Java 应用诊断能力
java·开发语言·jvm·阿里云·操作系统控制台·sysom
小玮看世界2 小时前
[Python]OD算法在OD实际运用转化参考清单
开发语言·python·算法
黎阳之光2 小时前
数字孪生赋能全域水网,实现水资源管控与节水降碳双向提升
人工智能·物联网·算法·安全·数字孪生
随意起个昵称2 小时前
【BFS】冰面滑行
算法·宽度优先