首页 > 其他分享 >dp问题

dp问题

时间:2023-11-21 23:23:32浏览次数:39  
标签:int 更新 问题 区间 解决 dp

1.区间dp

P1063 [NOIP2006 提高组] 能量项链 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

对于环形问题,我们常常可以采用将n个元素复制成2n个元素,或者选择(i + 1) % n的形式

第一次遇到区间dp,写个题解总结一下

区间dp能解决的问题就是通过小区间更新大区间,最后得出指定区间的最优解。

想要用区间dp解决问题,首先要确定一个大问题能够剖分成几个相同较小问题,且小问题很容易组合成大问题,从而从解决小问题逐渐解决大问题,体现的其实是分治的思想,只不过是通过dp用递推的方式解决了。

本题应通过演算过程发现最终问题的解决可由两个相同规模较小的问题轻松地转化过来。(一般分治时只分成两个简化程序) 用f[l][r]表示以a[l]开头a[r]结尾的数串的最大和,如k为i,j之间任一节点,有f[l][r]=max(f[l][r],f[l][k]+f[k][r]+a[l]*a[k]*a[r]); 对l,r的定义自己一定要十分清晰,从而确定好循环的边界。

但也有问题随之而来,在更新时要将2*n个元素都更新,而不能只更新到前n个,否则访问到n+1~2n时会出错

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int N = 410;
 5 int f[N][N];
 6 int n,a[205]; 
 7 int main()
 8 {
 9     cin >> n;
10     for(int i=1;i<=n;i++)  //***对环形问题的处理技巧***
11     {
12         cin >> a[i];
13         a[n+i]=a[i];
14     } 
15     
16     //可以视为项链每3个为一个区间
17     for(int i = 2;i <= n + 1;i ++)
18     {
19         //更新区间起点
20         for(int l = 1;l + i - 1 <=2 * n;l ++)  //如果采取了上述策略,一定要将2*n个点都更新 
21         {
22             int r = l + i - 1; //区间末端
23             for(int k = l + 1 ;k <= l + i - 2;k ++)//区间中的断点,表示项链的第三个点
24                 f[l][r]=max(f[l][r],f[l][k]+f[k][r] + a[l] * a[k] * a[r]); 
25         }
26     }
27     
28     int res = 0;
29     for (int i = 1;i <= n;i ++) res = max(res,f[i][n + i]);
30     cout << res;
31     return 0;
32 }
代码

 

标签:int,更新,问题,区间,解决,dp
From: https://www.cnblogs.com/rw666/p/17847874.html

相关文章

  • 关于 ts(TypeScript)报错一行上方使用 // @ts-ignore来忽略错误问题
    比如你的代码当中是使用Ts写的脚本,那么可能会有一些出现报错的情况,那么这个时候你可以使用://@ts-ignore写上这个,你的代码就不会出现报错的情况了,比如下面的代码App.VS.getView("MainLineView")?.test();即使你的类名MainLineView没有写这个方法,也不会出现报错的问题,虽然简单......
  • vue3所遇问题
    1. table表格无边框数据乱飞 解决方法:将import{}from'Elementplus'  删去  2.表单无法输入内容 解决方法 :   ref="form"     :model="form333"   ref与:modle 不可重名......
  • 解决问题:Unable to start embedded container; nested exception is java.lang.NoSuch
    因为有重复的jar原因:springboot有自己的tomcat运行环境我们又在构件路径中添加了tomcat解决方法:把项目构件路径中的tomcat给移除 ......
  • 关于一类最优解存在长度为 $k$ 的循环节的问题
    灵感来源问题形式:给定长度为\(n\)的序列,要求选出一些位置,使这些位置满足限制条件\(T\),其中\(T\)可以表述为一个长度为\(k\)的环满足条件\(T'\),选出第\(i\)个位置的收益是\(f(i\bmodk)\),求最大收益。关键在于证明一个引理:最优解一定存在长度为\(k\)的循环节。证明......
  • 有趣的Java之@Autowired属性注入问题
    ......
  • jsmpeg视频播放器使用方法和常见问题解决方案
    JSMpeg是一个使用JavaScript编写的视频播放器,它可以在浏览器中播放MPEG1视频和MP2音频流。JSMpeg的特点是它能够通过WebSockets实时传输视频流,并且可以在不支持HTML5视频播放器的浏览器上运行。以下是JSMpeg的基本使用方法和一些常见问题的解决方案:主要用来解决移移动端视频播放问......
  • jmeter beanshell常见问题:"BeanShellInterpreter: Error invoking bsh method: eval
    jmeter使用beanshell文件经常会遇到这个问题:BeanShellInterpreter:Errorinvokingbshmethod:evalInfile:inlineevaluationof.... 原因可能有:1.jar包没有放入对应位置解决:放到lib/ext目录下,并且重启jmeter2.beanshell不支持java泛型,如List<String>list=newAr......
  • DPO Matching
    题意给定一张大小为\(2n\)的图,求该图二分图匹配的方案数。\(n\le21\)。Sol状压板题。设\(f_T\)表示\(T\)集合内的点被匹配。直接转移即可。Code#include<iostream>#include<algorithm>#include<cstdio>#include<array>usingnamespacestd;#ifdefONLINE......
  • js实现自动滚动以及分页数据请求,解决不同手机scrollTop++兼容问题
    创作不易,主要是为了分享,希望能帮到碰到类似问题的朋友,有帮助的话就给点个赞吧。 需求:公司需要实现一份合同的自动滚动预览,以及分页请求下一页数据继续滚动,直到所有合同加载完成就取消滚动。问题:不同手机使用scrollTop++,会出现+1出现小数点,整数的情况,导致请求下一页的数据无法......
  • [ETL] [kettle] [dbeaver] 安装配置中的一些问题
    java:8&17kettle:8.3(java8)mysql:8.0mysql-connetor-java:8.0+dbeaver:23.3(java17)标准流程:下载,解压,点击,启动,连接数据库,干活DBeaver:java版本不符,请使用java17orlaterdbeaver默认用的是JAVA_HOME下的java版本(我的是java8)然而它实际需要java17才能启动。想使......