蓝桥杯——数组切分

数组切分

题目分析

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

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

题目代码

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]);
}
}
相关推荐
爱吃山竹的大肚肚2 分钟前
微服务间通过Feign传输文件,处理MultipartFile类型
java·spring boot·后端·spring cloud·微服务
_周游9 分钟前
Java8 API文档搜索引擎_使用内存缓冲区优化
java·搜索引擎·intellij-idea
twj_one10 分钟前
java中23种设计模式
java·开发语言·设计模式
SmartBrain11 分钟前
OCR 模型在医疗场景的选型研究
人工智能·算法·语言模型·架构·aigc·ocr
梵刹古音12 分钟前
【C语言】 跳转语句
c语言·开发语言·算法
liu****22 分钟前
29.路径类dp
c++·算法·acm
JMchen12323 分钟前
Android计算摄影实战:多帧合成、HDR+与夜景算法深度剖析
android·经验分享·数码相机·算法·移动开发·android-studio
tsyjjOvO25 分钟前
JDBC(Java Database Connectivity)
java·数据库
阿猿收手吧!29 分钟前
【C++】C++模板特化:精准定制泛型逻辑
开发语言·c++·算法
qq_124987075330 分钟前
基于springboot的尿毒症健康管理系统的设计与实现(源码+论文+部署+安装)
java·spring boot·spring·毕业设计·计算机毕业设计