当前位置: 首页 > java >正文

区间DP概述(JAVA)

区间DP

    • 概述
    • 例题
      • 例题一 更小的数
      • 例题二 能量项链

概述

区间DP和线性DP其实从代码角度来说就是遍历处理的顺序不一样
合并:即将两个或多个部分进行整合,也可以反过来;

特征:能将问题分解为能两两合并的形式;

求解:对整个问题设最优值,枚举合并点,将问题分解为左右两个部分,最后合并两个部分的最优值得到原问题的最优值。

例题

例题一 更小的数

在这里插入图片描述
这个题典型的用区间DP,可以看到比大小如果首位和末位的大小确定,是否满足条件就可以确定,而大小相等的时候就需要用到前面已经得到的dp[i+1][j-1]

package com.js.datastructure.recursion.蓝桥.国特训练营.动态规划线性DP;import java.util.Scanner;public class 更小的数 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);//字符串长度为n//由数字0~9组成//选取子串并且把子串翻转//dp[i][j] 代表下标从i到j子串的个数String s = scanner.nextLine();int len = s.length();int t = s.length();boolean[][] dp = new boolean[len][len];int ans = 0;for (int i = 2; i <= t; i++) {//代表子串的长度for (int j = 0; j < len - i + 1; j++) {int k = j + i - 1;if(s.charAt(j) > s.charAt(j + i - 1)){dp[j][k] = true;ans++;} else if (s.charAt(j) < s.charAt(j + i - 1)) {dp[j][k] = false;}else {dp[j][k] = dp[j+1][k-1];if(dp[j][k]){ans++;}}}}System.out.println(ans);}
}

例题二 能量项链

在这里插入图片描述

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {//需要把v[]再复制一份(使得每个数的遍历都是数组长度)//例如:输入  1 2 3 4  复制成 1 2 3 4 1 2 3 4//状态转移方程 dp[i][j] = Math.max(dp[i][k]+dp[k+1][j]+sum(i,k,j)) (i<=k<j)Scanner scan = new Scanner(System.in);int n = scan.nextInt();int[] arr = new int[2*n+2];for(int i=1;i<=n;i++){arr[i] = scan.nextInt();arr[n+i] = arr[i];}long[][] dp = new long[2*n+2][2*n+2];for(int len=2;len<=n;len++){for(int i=1;i+len-1<=2*n;i++){int j=i+len-1;for(int k=i;k<j;k++){dp[i][j] = Math.max(dp[i][j],dp[i][k]+dp[k+1][j]+arr[i]*arr[j+1]*arr[k+1]);}}}long ans = 0;for(int i=1;i<=n;i++){ans = Math.max(ans,dp[i][i+n-1]);}System.out.println(ans);scan.close();}
}
http://www.xdnf.cn/news/9783.html

相关文章:

  • 若依框架 账户管理 用户分配界面解读
  • 纤维组织效应偏斜如何影响您的高速设计
  • 资产生命周期管理:动态监控 + 精准管理
  • 爬虫框架:scrapy使用心得
  • PABD 2025:大数据与智慧城市管理的融合之道
  • 数字孪生技术赋能西门子安贝格工厂:全球智能制造标杆的数字化重构实践
  • Linux -- 进程地址空间
  • 高速连接器设计的真相
  • $3 #12阶段三小结Java se
  • 【经验】Ubuntu中设置terminator的滚动行数、从Virtualbox复制到Windows时每行后多一空行
  • android studio debug调试出现 IOException异常
  • 智能厨房系统—御控物联网IoT平台
  • UniApp微信小程序自定义导航栏实现
  • vite导入优化插件vite-plugin-importer
  • 华为OD机试真题——报文回路(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 【ConvLSTM第一期】ConvLSTM原理
  • 回文数-leetCode-009
  • [Java恶补day10] 560. 和为K的子数组
  • 每日Prompt:卵石拼画
  • 计算机图形学:(五)坐标系
  • 排序算法-归并排序与快速排序
  • 如何避免客户频繁更换对接人
  • vue3项目 前端文件下载的两种工具函数
  • spring的多语言怎么实现?
  • OSI 七大层详解
  • vue element日期范围选择器只能选择指定天数内的
  • shell脚本实现字符串子网掩码转为位数
  • mqtt协议连接阿里云平台
  • 基于多模态脑电、音频与视觉信号的情感识别算法【Nature核心期刊,EAV:EEG-音频-视频数据集】
  • Deepseek应用技巧-Dify本地化搭建合同审批助手