AcWing 1068. 环形石子合并

题意:

n堆石头围成一个圈,然后将相邻两堆合并成新的一堆,得分为新的一堆的石头数
问最高得分合最低得分

题解:

很简单,区间dp的模板题
和这个题一样
状态转移方程:
dpmax[i][j] = max(dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1])
dpmin[i][j]=min(dp[i][k]+dp[k+1][j])+sum[j]-sum[i-1]
因为题目说的是环形,所以数组复制一倍
马上要java期末考试,所以用java练练

代码:

import java.io.*;
import java.util.*;class Main{static BufferedReader read = new BufferedReader(new InputStreamReader(System.in));static int N = 410, INF = 0X3f3f3f3f;static int[] a = new int[N], sum = new int[N];static int[][] dpMax = new int[N][N];static int[][] dpMin = new int[N][N];public static void main(String[] args) throws Exception{int n = Integer.valueOf(read.readLine());String[] ss = read.readLine().split(" ");for(int i = 1; i <= ss.length; i++){a[i] = Integer.valueOf(ss[i - 1]);a[i + n] = Integer.valueOf(ss[i - 1]);}for(int i = 1; i <= 2 * n; i++){sum[i] = sum[i - 1] + a[i];Arrays.fill(dpMax[i], -INF);Arrays.fill(dpMin[i],  INF);}for(int len = 1; len <= n; len++){for(int i = 1; i + len - 1 <= 2 * n; i++){int j = i + len - 1;if(len == 1) {dpMax[i][j] = dpMin[i][j] = 0;}else{for(int k = i; k < j; k++){dpMax[i][j] = Math.max(dpMax[i][j], dpMax[i][k] + dpMax[k + 1][j] + sum[j] - sum[i - 1]);dpMin[i][j] = Math.min(dpMin[i][j], dpMin[i][k] + dpMin[k + 1][j] + sum[j] - sum[i - 1]);}}}}int max = -INF, min = INF;for(int left = 1; left <= n; left++){max = Math.max(max, dpMax[left][left + n - 1]);min = Math.min(min, dpMin[left][left + n - 1]);}System.out.println(min);System.out.println(max);}}

AcWing 1068. 环形石子合并相关推荐

  1. AcWing 1068. 环形石子合并(环形区间DP)

    AcWing 1068. 环形石子合并(环形区间DP) 一.问题 二.思路 三.代码 一.问题 二.思路 在讲解这道题之前,我们需要先掌握线性的区间DP问题,如果对于线性区间DP的解决方式还不了解的话 ...

  2. 区间DP之环形石子合并

    环形石子合并 题目传送门 题目描述 将 n 堆石子绕圆形操场排放,现要将石子有序地合并成一堆. 规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数记做该次合并的得分. 请编写一个程序,读入堆 ...

  3. java怎么做沙子合并_dp之沙子合并 环形沙子合并 沙子合并加强 沙子三兄弟的故事...

    沙子合并加强 沙子合并问题 问题描述:设有N堆沙子排成一排,其编号为1,2,3,-,N(N<=2000).每堆沙子有一定的数量,可以用一个整数来描述,现在要将这N堆沙子合并成为一堆,每次只能合并 ...

  4. 【动态规划】 石子合并问题(环形) (ssl 1597)

    石子合并问题石子合并问题石子合并问题 Description 在一个圆形操场的四周摆放着n 堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该 ...

  5. 【SSL】1597石子合并问题(环形)

    [SSL]1597石子合并问题(环形) Time Limit:1000MS Memory Limit:65536K Description 在一个圆形操场的四周摆放着n 堆石子.现要将石子有次序地合并 ...

  6. AcWing.282石子合并(区间DP)题解

    石子合并 题目描述 设有N堆石子排成一排,其编号为1,2,3,-,N. 每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆. 每次只能合并相邻的两堆,合并的代价为这两堆石子的质 ...

  7. 【动态规划dp】区间DP模板 Acwing 282. 石子合并 | P3205 [HNOI2010]合唱队

    区间DP 模板 282. 石子合并 #include<iostream> #include<cmath> #include<algorithm> #include& ...

  8. AcWing 石子合并

    1.题目描述 设有N堆石子排成一排,其编号为1,2,3,-,N. 每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆. 每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和 ...

  9. 石子合并[DP-N3]

    题目描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆石子合并成1 ...

最新文章

  1. MySQLRPM安装
  2. 树莓派和windows的FileZillla文件共享,补充:树莓派图形Xrdp界面登录
  3. 服务端命令(dockerd)
  4. xx Chrome浏览器更新2020版本:黑暗模式一样使用
  5. JavaScript 函数定义+内置函数使用+array对象+object类型
  6. Golang——文件创建和写入、OpenFile追加写入、Open读取文件、ReadBytes缓冲区读取、os.Args、flag
  7. Java基础知识融合(Arraylist集合,多态,继承,封装,包装类,循环嵌套,if嵌套等等)
  8. Linux系统:centos7下安装Jdk8、Tomcat8、MySQL5.7环境
  9. android callmanager.java,如何使用Mobile-SDK-Android正确注销DJISDKManager和SDKManagerCallback应用程序?...
  10. Cisco PVLAN的配置
  11. HDOJ水题集合8:DBFS
  12. python进程socket通信_python3 进程间通信之socket.socketpair()
  13. 计算机技术与传感技术的关系,现代传感技术与系统课后题及答案.doc
  14. 一种计算机显卡保护装置,一种计算机显卡辅助支撑装置制造方法及图纸
  15. 日语词频分析——mecab使用
  16. EasyExcel筛选和冻结首行
  17. springboot JWT Token 自动续期的解决方案
  18. 小程序webview应用实践
  19. 区块链应用场景:物联网和物流供应链
  20. [附源码]java毕业设计网上书店系统

热门文章

  1. 超越Linux!华为鸿蒙明年将成“第五大操作系统”,网友:何时超过iOS?
  2. 独立主题需要有index.php模板文件,wordpress 主题模板文件列表及其作用
  3. 表3.5 文章管理测试用例表_本地管理表空间管理机制
  4. mysql 5.7.6 5.7.19_MySQL数据库之Mysql 5.7.19 免安装版遇到的坑(收藏)
  5. 计算机安全模型研究与应用,软件哨兵安全动态检测模型的研究与实现-计算机应用研究.PDF...
  6. 中止是怎么用的_多士炉怎么用 使用多士炉注意事项
  7. android.mk 翻译,翻译ANDROID-MK.TXT
  8. Typora markdown公式换行等号对齐_下了31个markdown编辑器,我就不信选不出一个好用的...
  9. java 代码块 作用_Java核心(三):代码块的作用
  10. android http请求缓存,Android Http请求和响应使用协议缓冲区