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

Codeforces Round 1009 (Div. 3)-G

点我写题

题意:与凸边形的划分题类似,只不过这次划分的三角形不能有共享边

思路:考虑区间dp[i][j],处理完i-j区间的划分最大值

转移:枚举的区间长度<3明显不用考虑,长度==3则只能构成一个三角形,答案就是三个点权值的乘积,len>3,考虑枚举的俩个端点,是否要构成一个三角形:

case1:如果不构成,则答案可以从dp[i+1][j-1]和dp[i][k]+dp[k+1][j]转移过来(k是区间i-j中的某个点)

case2:构成的话,则是可以从dp[i+1][k-1]+dp[k+1][j]+a[i]*a[k]*a[j]转移过来,(因为不能有共享边),然后注意一下边界情况即可

代码:

import java.util.*;
import java.io.*;
public class Main{
    public static BufferedReader rd=new BufferedReader(new InputStreamReader(System.in));
    public static BufferedWriter wd=new BufferedWriter(new OutputStreamWriter(System.out));
    public static void solve()throws Exception{
         String dr[]=rd.readLine().split(" ");
         int n=Integer.parseInt(dr[0]);
         int a[]=new int [n+10];
         dr=rd.readLine().split(" ");
        long dp[][]=new long [n+10][n+10];
         for(int i=1;i<=n;i++) a[i]=Integer.parseInt(dr[i-1]);
         for(int len=3;len<=n;len++){
             for(int i=1;i+len-1<=n;i++){
                 int j=i+len-1;
                 if(len==3){
                     dp[i][j]=a[i]*a[j]*a[i+1];
                 //    wd.write(i+" "+j+" "+dp[i][j]+"\n");
                     continue;
                 }
                 dp[i][j]=dp[i+1][j-1];
                 for(int k=i;k<j;k++){
                     long tem=dp[i][k]+dp[k+1][j];
                     long tem2=0;
                     if(k>i) tem2=a[i]*a[k]*a[j]+dp[i+1][k-1]+dp[k+1][j-1];
                     dp[i][j]=Math.max(dp[i][j],Math.max(tem,tem2));
                 }
              //   wd.write(i+" "+j+" "+dp[i][j]+"\n");
             }
         }
        wd.write(dp[1][n]+"\n");
    }
    public static void main(String args[])throws Exception{
        int t=Integer.parseInt(rd.readLine());
        while(t-->0){
            solve();
            wd.flush();
        }
    }
}

相关文章:

  • HTML 标题
  • Ubuntu 24.04-JAVA-JDBC-mysql
  • Influxdb cli删除数据步骤
  • 【c++】【智能指针】shared_ptr底层实现
  • python_巨潮年报pdf下载
  • 判断是不是二叉搜索树(C++)
  • java静态变量,静态方法存储在内存中哪个位置
  • TCP怎么保证可靠传输
  • redis常用命令
  • Sublime Text 2.0.2 安装与汉化指南:从下载到中文包配置的完整教程
  • 【强化学习】第二讲——探索与利用exploration vs. exploitation
  • [WEB开发] Web基础
  • zero-shot文字分类模型
  • 【数据结构与算法】Java描述:第四节:二叉树
  • 苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
  • DeepSeek 3FS集群化部署临时笔记
  • Django中的查询条件封装总结
  • 解决 openjtalk.obj : error LNK2001: 无法解析的外部符号 __imp__PySequence_List 错误
  • C语言基础要素(016):入口条件循环:while与for
  • go 通过汇编分析栈布局和函数栈帧
  • 龙翔被撤销南京市人大常委会主任职务,此前已被查
  • 铁路12306回应“五一前大量放票”传闻:个别方向和区段出现新增票额,均即时进入系统重新发售
  • 解放日报:人形机器人新赛道正积蓄澎湃动能
  • 前行中的“模速空间”:要攻克核心技术,也要成为年轻人创业首选地
  • 美商界报告:全美超86万岗位依赖对华出口,关税将重创美国出口商
  • 【社论】法治是对民营经济最好的促进