正题

POJ题目链接:http://poj.org/problem?id=1179
洛谷评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P4342


题目大意

一个数字环,每个数字之间有一个符号(+++或×" role="presentation" style="position: relative;">××\times),开始时选择一条边断开,然后任意选择两个点合并,合并之后的权值是原版两边的点进行边符号操作的值。求最后一个值最大。


解题思路

将原环复制一遍放在末尾,然后用f0,l,rf0,l,rf_{0,l,r}表示l∼rl∼rl\sim r区间已经合并了的最小权值,然后用f1,l,rf1,l,rf_{1,l,r}表示最大值,然后每次枚举4种方式(大×/+×/+\times/+小,小×/+×/+\times/+小,大×/+×/+\times/+大,小×/+×/+\times/+大),然后就正常区间dp就好了。


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int n,op[101],dp[2][101][101],ans;
int main()
{memset(dp[0],127/3,sizeof(dp[0]));memset(dp[1],-127/3,sizeof(dp[1]));scanf("%d\n",&n);for(int i=1;i<=n;i++){if(i==n) scanf("%c %d",&op[i],&dp[0][i][i]);else scanf("%c %d ",&op[i],&dp[0][i][i]);dp[1][i][i]=dp[0][i][i];if(i!=n){dp[0][i+n][i+n]=dp[1][i+n][i+n]=dp[0][i][i];op[i+n]=op[i];}}for(int i=2;i<=n;i++)for(int l=1;l<=2*n-i;l++){int r=l+i-1;for(int k=l;k<r;k++){for(int p1=0;p1<2;p1++)for(int p2=0;p2<2;p2++){int tmp=op[k+1]=='t'?dp[p1][l][k]+dp[p2][k+1][r]:dp[p1][l][k]*dp[p2][k+1][r];dp[0][l][r]=min(dp[0][l][r],tmp);dp[1][l][r]=max(dp[1][l][r],tmp);//动态转移}}}ans=-2147483647;for(int i=1;i<=n;i++) ans=max(ans,dp[1][i][i+n-1]);//计算答案printf("%d\n",ans);for(int i=1;i<=n;i++)if(dp[1][i][i+n-1]==ans)printf("%d ",i);//统计答案
}

POJ1179,P4342-[IOI1998]Polygon【区间dp】相关推荐

  1. P4342 [IOI1998]Polygon

    题意翻译 题目可能有些许修改,但大意一致 多边形是一个玩家在一个有n个顶点的多边形上的游戏,如图所示,其中n=4.每个顶点用整数标记,每个边用符号+(加)或符号*(乘积)标记. 第一步,删除其中一条边 ...

  2. [LUOGU] P4342 [IOI1998]Polygon

    poj挂了快两天了.. 洛谷的今日运势真的强,说能完成WA的题就能完成.. 咳咳,区间DP. 思路类似合并果子,不过在维护f[i][j] (i到j的最大值) 同时也要维护g[i][j] (i到j的最小 ...

  3. P4342:[IOI1998]Polygon(区间dp)

    一道警钟一样的好题 解析 乍一看: "这不就能量项链嘛,这也蓝?" 然后就愉快的WA掉了- qwq 让我们回归本源,在什么时候可以动态规划? "局部最优解可以带动全局最优 ...

  4. P4342 [IOI1998]Polygon —— 断链成环

    多边形是一个玩家在一个有n个顶点的多边形上的游戏,如图所示,其中n=4.每个顶点用整数标记,每个边用符号+(加)或符号*(乘积)标记. 第一步,删除其中一条边.随后每一步: 选择一条边连接的两个顶点V ...

  5. POJ 2955 Brackets (区间DP)

    题目链接:http://poj.org/problem?id=2955 Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  6. 0x53. 动态规划 - 区间DP(习题详解 × 8)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 0x53. 动态规划 - 区间DP Problem A. 最优矩阵链乘 Problem B. ...

  7. UVA1626 括号序列 Brackets sequence(区间DP匹配括号,输出匹配方案)

    整理的算法模板合集: ACM模板 UVA1626 Brackets sequence 我们将正规括号序列定义如下: 空序列是正规括号序列. 如果 SSS 是一个正规括号序列,那么 (S) 和 [S] ...

  8. UVA10003 切木棍 Cutting Sticks(区间DP、细节)

    整理的算法模板合集: ACM模板 本题其实就是一个区间DP 的模板题,总长度为len,有n个切割点,也就是说能被切割成n+1段,所以左边界是0,有边界是n + 1,所以答案就是f[0][n + 1]. ...

  9. 【动态规划】区间DP - 最优矩阵链乘(另附POJ1651Multiplication Puzzle)

    最优矩阵链乘(动态规划) 一个n∗mn*mn∗m的矩阵由 nnn 行 mmm 列共 n∗mn*mn∗m 排列而成.两个矩阵A和B可以相乘当且仅当A的列数等于B的行数.一个nm的矩阵乘mp的矩阵,运算量 ...

最新文章

  1. 在SAP Spartacus的convertor函数里,直接修改输入参数target的值,会有什么问题
  2. 【转】SQL SERVER 存储过程学习笔记
  3. 如何在{{input}}中使用action
  4. java打卡-day3 变量和数据类型
  5. Three Tips
  6. http 301、304状态码
  7. Meanshift and Camshift
  8. 整理了一下国外的搜索引擎 名字以及IP地址
  9. java代码对图片缩放
  10. GD2016noip获奖名单
  11. 如何准备银行秋招春招?
  12. daytime协议的服务器和客户端程序,用Socket套接字实现DAYTIME协议的服务器和客户端程序-20210414073352.docx-原创力文档...
  13. 北京航班延误_预测航班延误
  14. 数据产品经理修炼手册(从零基础到大数据产品实践)
  15. 计算机学后感作文400,科技展观后感作文400字(精选7篇)
  16. java水果爆炸动画_5分钟快速实现Android爆炸破碎酷炫动画特效的示例
  17. java android时间工具类 week 月年
  18. dhtml_DHTML乌托邦:使用JavaScript和DOM的现代Web设计
  19. php wenjian shangchuan shijian,PHP时间和日期 - osc_nnp3dgfb的个人空间 - OSCHINA - 中文开源技术交流社区...
  20. vue使用Echarts问题汇总

热门文章

  1. java中立方根方法_java基础:4、java中Math类的常用方法?
  2. 简述原型模型的特点_3D打印硅胶复模手板的步骤和特点有哪些
  3. python的matplotlib库内的函数_如何在matplotlib中找到函数下面的区域?
  4. 完美国际真数苹果_如果给你推荐一款很贵,但好用的苹果手机壳,你会买吗?...
  5. C++ 学习之旅(14)——构造函数constructors和析构函数destructors
  6. [Spring5]Spring框架概述
  7. C++实现邻接表存储的图及bfs遍历
  8. [蓝桥杯2017初赛]方格分割-dfs+思维
  9. 确定S中最接近中位数的k个元素(算法导论第三版9.3-7)
  10. python加载模型包占用内存多大_加载pickle python对象会占用大量内存