洛谷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 ...
随机推荐
- Spring MVC中返回JSON数据的几种方式
我们都知道Spring MVC 的Controller方法中默认可以返回ModeAndView 和String 类型,返回的这两种类型数据是被DispatcherServlet拿来给到视图解析器进行继 ...
- java第一次测验
package kaoshi; import java.util.Scanner; public class ScoreManagement { static int t=0; static int ...
- android EditText实现圆弧背景
一.给EditText添加背景,并且4角圆弧 对应的xml 以及样式如下: <EditText android:id="@+id/o_item_num" style=&quo ...
- Mars视频笔记——Animation
Animations的使用(1) 什么是Animations 提供了一系列的动画效果,可以应用在绝大多数控件中 Animations的分类 1 Tweened Animations 渐变动画 提供了旋 ...
- Android MediaPlayer 基础简介
本文链接: Android MediaPlayer 基础简介 简单介绍MediaPlayer的基本概念,状态,常用的方法与监听器. 什么是MediaPlayer MediaPlayer类可以用来播放音 ...
- 复习0824js
编程思想: 面向过程:凡事亲力亲为,所有事情的过程都要清楚,注重的是过程. 面向对象:提出需求,找到对象,对象解决这个问题,我们要结果,注重的是结果. 面向对象的特性:封装,继承,多态: JS: 是一 ...
- pip安装Mysql-python报错EnvironmentError: mysql_config not found
如下图,安装Mysql-python报错EnvironmentError: mysql_config not found 经过验证,可通过以下方式解决: 从官网下载mysql安装,成功之后输入PATH ...
- [Pandas] 05 - Parallel processing
相关资源 [Python] 09 - Multi-processing [Pandas] 01 - A guy based on NumPy [AI] 深度数学 - Bayes 这章非常有意思,但一定 ...
- 解决mysql不能在查询A表的同时,更新A表的问题
方法: 运用中间表 UPDATE 表名 SET 字段名 = '' WHERE id in (SELECT a.id FROM (SELECT id FROM 表名 WHERE ISNULL(字段名)) ...
- 微信小程序中scoll-view的一个小坑
在微信小程序开发中,有时候swiper-view会出现显示不全的问题,我们可以用scoll-view来把它包裹下,但是要用scoll-view就一定要设置height,而我们经常是在页面中加的这个组件 ...