洛谷NOIp热身赛 T2123 数列游戏
题目背景
此题为改编题,特别鸣谢倪星宇同学。
有一次,HKE和LJC在玩一个游戏。
题目描述
游戏的规则是这样的:LJC在纸上写下两个长度均为N的数列A和B,两个数列一一对应。HKE每次可以找两个相邻的数A[i]和A[i+1],如果它们两个不互质,HKE可以选择得到(B[i]+B[i+1])分,然后擦掉A和B位置上的第i,i+1个数,并把两个序列重新按顺序编号。当所有相邻的数互质时,游戏结束。
HKE想知道他最大得分是多少。
输入输出格式
输入格式:
第1 行一个整数N;
第2 行N 个整数,依次表示Ai;
第3 行N 个整数,依次表示Bi。
输出格式:
仅含一个整数,表示B 列被删去的可能最大和。
输入输出样例
说明
对于30%的数据,N ≤ 20;
对于60%的数据,N ≤ 100;
对于80%的数据,N ≤ 500
对于100%的数据,N ≤ 800, 1 ≤ Ai, Bi ≤ 10^9。
题解:
区间dp,设dp[i][j]表示i和j之间不一定要消完的最大收益,g[i][j]为i到j必须消完的收益,那么g[i][j]有两个转移,一个是枚举断点,g[i][j]=max(g[i][j],g[i][k]+g[k+1][j]);然后我们可以消去中间的,再消i和j,
g[i][j]=max(g[i][j],c[i]+c[j]+g[i+1][j-1]);
然后是dp[i][j],如果i和k可以消,那么我们把i~k之间的都消完,然后消k+1~j。 dp[l][r]=max(dp[l][r],c[l]+c[r]+g[l+1][r-1]);如果i,j可以消,那么可以先消i,j之间的,然后消i和j。dp[l][r]=max(dp[l][r],c[l]+c[r]+g[l+1][r-1]);
代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stdio.h>
#include<cmath>
#define ll long long
#define MAXN 810
using namespace std;
int n;
ll a[MAXN],c[MAXN];
ll dp[MAXN][MAXN],b[MAXN][MAXN],g[MAXN][MAXN]; ll gcd(ll x,ll y){
if(y==) return x;
else return gcd(y,x%y);
} bool emt(int i,int j){
if(gcd(a[i],a[j])!=) return ;
return ;
} ll DP(int l,int r){
if(l==r) return ;
if(b[l][r]) return dp[l][r];
if(r==l+) return max((ll),g[l][r]);
b[l][r]=;
dp[l][r]=max((ll),DP(l+,r));
for(int k=l+;k<r;k++){
if(emt(l,k)){
if(k==l+) dp[l][r]=max(dp[l][r],c[l]+c[k]+DP(k+,r));
else dp[l][r]=max(dp[l][r],c[l]+c[k]+g[l+][k-]+DP(k+,r));
}
}
if(emt(l,r)) dp[l][r]=max(dp[l][r],c[l]+c[r]+g[l+][r-]);
return dp[l][r];
} int main(){
cin>>n;
for(int i=;i<=n;i++) cin>>a[i];
for(int j=;j<=n;j++) cin>>c[j];
memset(g,-,sizeof(g));
for(int len=;len<=n;len++){
for(int i=;i+len-<=n;i++){
int j=i+len-;
if(j==i+){
if(emt(i,j)) g[i][j]=c[i]+c[j];
else g[i][j]=g[][];
}
else{
if(emt(i,j)) g[i][j]=max(g[i][j],c[i]+c[j]+g[i+][j-]);
for(int k=i+;k<j;k++) g[i][j]=max(g[i][j],g[i][k]+g[k+][j]);
}
}
}
printf("%lld",max(DP(,n),(ll)));
}
洛谷NOIp热身赛 T2123 数列游戏的更多相关文章
- 洛谷NOIp热身赛题解
洛谷NOIp热身赛题解 A 最大差值 简单树状数组,维护区间和.区间平方和,方差按照给的公式算就行了 #include<bits/stdc++.h> #define il inline # ...
- 洛谷.2042.[NOI2005]维护数列(Splay)
题目链接 2017.12.24 第一次写: 时间: 2316ms (1268ms) 空间: 19.42MB (19.5MB)(O2) 注:洛谷测的时间浮动比较大 /* 插入一段数:将这些数先单独建一棵 ...
- 洛谷 P2059 [JLOI2013]卡牌游戏(概率dp)
题面 洛谷 题解 \(f[i][j]\)表示有i个人参与游戏,从庄家(即1)数j个人获胜的概率是多少 \(f[1][1] = 1\) 这样就可以不用讨论淘汰了哪些人和顺序 枚举选庄家选那张牌, 枚举下 ...
- 洛谷 大牛分站 P1000 超级玛丽游戏
题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 题目描述 超级玛丽是一个非常经典的游戏.请你用字符画的形式输出超级玛丽中的一个场景. *** ...
- BZOJ3191或洛谷2059 [JLOI2013]卡牌游戏
BZOJ原题链接 洛谷原题链接 我们可以倒着来\(DP\). 设\(f[i][j]\)表示剩余\(i\)个人,从庄家数起第\(j\)个人的胜率,设当前枚举到第\(k\)张牌,该情况下这一轮淘汰的位置为 ...
- 洛谷 P4819 [中山市选]杀人游戏
洛谷 题目就是让我们在DAG中找到一些点,覆盖所有点. 因为是DAG,可以想到tarjan缩一下点.假设我们需要找x个点,那么答案就是(n-x)/n. 我们怎么选点呢? 敏锐的我们很快就能想到,直接选 ...
- 【洛谷】P1247取火柴游戏
题目链接:https://www.luogu.org/problemnew/show/P1247 题意:nim取石子的题意,多了一个判断先手赢的话,输出先手第一把怎么拿,以及拿完之后每堆还剩多少. 题 ...
- 【洛谷4424】[HNOI_AHOI2018]寻宝游戏(我也不知道括号里该写啥)
题目 洛谷 4424 分析 感觉思路比较神仙. 对于按位与和按位或两种运算,显然每一位是独立的,可以分开考虑. 对于某一位,「与 \(0\)」会将这一位变成 \(0\),「或 \(1\)」会将这一位变 ...
- 洛谷 P3781 - [SDOI2017]切树游戏(动态 DP+FWT)
洛谷题面传送门 SDOI 2017 R2 D1 T3,nb tea %%% 讲个笑话,最近我在学动态 dp,wjz 在学 FWT,而我们刚好在同一天做到了这道题,而这道题刚好又是 FWT+动态 dp ...
随机推荐
- Go 语言基础——变量常量的定义
go语言不支持隐式类型转换,别名和原有类型也不能进行隐式类型转换 go语言不支持隐式转换 变量 变量声明 var v1 int var v2 string var v3 [10]int // 数组 v ...
- Python(Head First)学习笔记:三
3 文件与异常:调试.处理错误.迭代.改进.完善 处理错误:利用Python的异常处理机制来处理异常情况. 程序外部的数据:大多程序基本模型:首先输入数据,进行处理,然后存储.显示.打印或传输. ...
- 洛谷 P3952时间复杂度 (本地AC测评RE的伪题解)
[题目描述] 小明正在学习一种新的编程语言 A++,刚学会循环语句的他激动地写了好多程序并 给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序, 于是你的机会来啦!下面请你编写 ...
- [大数据学习研究]1.在Mac上利用VirtualBox搭建本地虚拟机环境
1. 大数据和Hadoop 研究学习大数据,自然要从Hadoop开始. Hadoop不是一个简单的软件,而是有一些列软件形成的生态,其核心思想来自Google当初发布的三篇论文,后来做了开源的实现, ...
- Vector和Arrarlist的异同;Hashtanle和HashMap的异同
Vector和ArrayList的异同 实现原理相同,功能相同,可以互用 主要区别: Vector线程安全,ArrayList重速度,轻安全,线程非安全. 长度需要增长时,Vector默认增长一倍,A ...
- 深入理解Three.js中透视投影照相机PerspectiveCamera
前言 在开始正式讲解透视摄像机前,我们先来理理three.js建模的流程.我们在开始创建一个模型的时候,首先需要创建我们模型需要的物体,这个物体可以是three.js中已经为我们封装好的,比如正方体, ...
- Charles 破解版免费下载和注册安装教程
本文参考:[Charles 破解版免费下载和注册安装教程](https://www.axihe.com/tools/charles/charles/free-use.html) **软件开发不易,请尽 ...
- 20 (OC)* GCD、NSOperation、NSThread。多线程
多线程编程技术的优缺点比较 NSThread (抽象层次:低) 优点:轻量级,简单易用,可以直接操作线程对象 缺点: 需要自己管理线程的生命周期,线程同步.线程同步对数据的加锁会有一定的系统开销. C ...
- 《JavaScript DOM 编程艺术》 学习笔记
目录 <JavaScript DOM 编程艺术> 学习笔记 第一章 js简史 第二章 js语法 准备工作 语法 第三章 DOM DOM中的D DOM中的O DOM中的M 第四章 js图片库 ...
- SpringBoot和Hibernate整合
1.先使用idea创建maven项目(这个就不详细讲了,很简单的操作) 2.创建完maven项目之后添加springboot依赖,pom.xml文件如下: <?xml version=" ...