题干:

健健开发了一个游戏叫做<<者护守形隐>>,里面有一个情节是这样的,女主子纯藤武被坏人关在了密室里,作为男主的肖健当然要英雄救美。但是要打开密室的门,必须解开一道谜题。
门上有几个数字围成的一个圈,每次消除一个数字的代价是这个数字旁边的两个数字的gcd,当最后消的只剩两个数时,消除这两个数的代价就是这两个数字的gcd,密室的密码就是消除所有数字的最小代价。
请你帮助肖健解决这个问题
例如数字2,3,4,5,他可以以2的代价(gcd(2,4)==2)消除3,或者以1的代价(gcd(3,5)==1)消除4,或者以1的代价(gcd(3,5)==1)消除2

Input

Input contains multiple test cases. Each test case consists of a single line starting with an integer n which indicates the number of values in the sequence (2 ≤ n ≤ 100). This is followed by n positive integers which make up the sequence of values in the game. All of these integers will be ≤ 1000. Input terminates with a line containing a single 0. There are at most 1000 test cases

Output

For each test case, display the minimum cost of removing all of the numbers

Sample Input 1

4 2 3 4 5
5 14 2 4 6 8
0

Sample Output 1

3
8

题目大意:

一个环状数组,给定可以删去一个数,代价的相邻两个数的gcd,求最小代价。

解题报告:

这题如果不提前把gcd打出来在codeforce上不会T(900ms左右),但是比赛的机子好像就T了。但是这题其实是可以变成环来做的。但是区别就是最后的更新ans不能直接就是让他长度是n的来更新,因为最后剩下的两个点可能在任意的位置,所以我们需要n^2枚举这两个位置,然后分别更新答案,这样得到的才是正解。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 2e5 + 5;
int a[MAX];
int g[1005][1005];
int dp[205][205];
int n;
int main()
{for(int i = 0; i<=1000; i++) {for(int j = 0; j<=1000; j++) {g[i][j] = __gcd(i,j);}}while(~scanf("%d",&n)) {if(n == 0) break;memset(dp,0x3f,sizeof dp);for(int i = 1; i<=n; i++) scanf("%d",a+i),a[i+n] = a[i];for(int i = 1; i<=2*n - 1; i++) dp[i][i+1] = 0;//g[a[i]][a[i+1]];for(int i = 1; i<=2*n; i++) dp[i][i] = 0;for(int len = 3; len<=n; len++) {for(int l = 1; l+len-1<=2*n; l++) {int r = l+len-1;for(int k = l+1; k<r; k++) {dp[l][r] = min(dp[l][r] , dp[l][k] + dp[k][r] + g[a[l]][a[r]]);}}}int ans = 0x3f3f3f3f;for(int i = 1; i<=n; i++) {for(int j = i+1; j<=n; j++) {ans = min(ans,dp[i][j] + dp[j][i+n] + g[a[i]][a[j]]);}}printf("%d\n",ans);}return 0 ;
}

【Gym - 101196F】Removal Game (环形区间dp,环状,细节优化)相关推荐

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

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

  2. AcWing 320. 能量项链(环形区间DP)

    AcWing 320. 能量项链(环形区间DP) 一. 问题: 二.分析: 三.代码 一. 问题: 二.分析: 在讲解这道题之前,大家需要对线性区间DP和环形区间DP有一定的了解,因此如果不会这两个知 ...

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

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

  4. 【NOIP2015提高组】子串 区间DP+滚动数组优化

    题意: 有两个仅包含小写英文字母的字符串 A 和 B. 现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一个新的字符串. 请问 ...

  5. (详解)区间DP —— 平行四边形优化

    本文从普通区间dp.平行四边形优化区间dp.例题三个步骤,详细分析了区间动态规划!!! 编写不宜,希望各位兄台耐心阅读完整!!! 1.区间dp 区间dp其实就是一种建立在线性结构上的整体上对区间的动态 ...

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

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

  7. hdu4745区间dp处理环形

    题目地址 注意这题并不是跳连续的区间,可以跨越,只是不能跨越已经走过的点. 根据题意,举个例子:2 1 1 2 4 5 9 8 9的答案应该是 7,为什么是7呢,我们发现在开头有一个回文串,2112, ...

  8. 【DP学习总结】区间DP

    文章目录 前言 例题 例题[1]石子合并 例题[2]回文子序列 小结 例题[3]环形石子合并(破环成链) 例题[4]多边形 [例题5]String painter 前言 区间dp,顾名思义,是解决一类 ...

  9. 上元节的灯会(灭)-区间dp

    题目背景 上元节的庙会上,牛宝靠自己的聪明才智成功破解了花灯阵,点亮了在场所有花灯,但他没料到的是这个游戏包含AB两个项目,A项目就是点亮所有花灯,而B项目则是熄灭所有花灯.不过点亮的是花灯阵,熄灭的 ...

最新文章

  1. 关于命令行窗口输入pip list出错的一些解决办法
  2. rocketmq消费负载均衡--push消费为例
  3. 《精益软件度量——实践者的观察与思考》—第1章1.1节精益软件开发的度量体系...
  4. Nagios(页面)报错: Return code of 13 is out of bounds
  5. 水晶报表加载失败的解决方法
  6. 【转】VBScript-RegExp对象的详细用法
  7. 完整解决Flash载入中文FLASH乱码问题
  8. 【收藏】基于Dockerfile搭建JAVA Tomcat运行环境
  9. STAMP:Short-TermAttention/MemoryPriorityModelfor Session-basedRecommendation
  10. 搭建一个个人网站需要多少钱预算?
  11. 设置页面左右结构(其中一端自适应)
  12. iOS内存管控实战(上)—原理篇
  13. DEM数据下载链接(ASTER GDEM、SRTM、ALOS PALSAR DEM)
  14. 【报错记录】解决华擎J3455-ITX不插显示器无法开机的问题
  15. 系统 应用程序 提示 初始化失败 或 无法加载模块 等错误
  16. linux第一块ide硬盘命名为,Linux 硬盘分区
  17. 七彩视界开源全解公益版,全新后台非常漂亮,全网首发!
  18. 打开 android studio 时遇到does not point to a valid
  19. (清华毕业生)大佬总结的“大数据”学习路线+教程
  20. 最早截止时间优先(EDF)

热门文章

  1. 数据库-Oracle【Oracle数据库设置默认表空间问题及Oracle,SQL,MySQL的自增变量设置】...
  2. 深度学习第一次课-数学
  3. [Leetcode][第1025题][JAVA][除数博弈][数学][递推]
  4. linux日志服务器配置在哪个文件,Linux中日志的基本配置(syslog)
  5. python爬虫脚本ie=utf-8_Python反爬虫伪装浏览器进行爬虫
  6. c语言中的取模运算符_C语言除法算法和取模运算的实现(多种算法,多种思路)...
  7. php仿微信上传图片压缩,PHP仿微信多图片预览上传实例代码
  8. html怎么在字体中加波浪线,CSS3实现文字波浪线效果
  9. PC817/TLP2309/TLP291/AQY280S主要参数对比
  10. python autoit上传文件_结合python+selenium使用AutoIt V3实现文件、图片上传