题目链接:hdu_5900_QSC and Master

题意:

有n个数,每个数有个key值,有个val,如果相邻的两个数的key的gcd大于1那么就可以得到这两个数的val的和,现在问怎么取使得到的和最大

注意:1 2 2 4,第2个和第3个取掉后,第一个就和第4个相邻了

题解:

这是一道区间DP题,之前没做过,比赛时没有想出怎么来DP

考虑区间dp[i][j],枚举i到j的k,然后更新一下当前的最大值

如果gcd(i,j)>1,如果i+1=j,说明是相邻的,直接相加,如果dp[i+1][j-1]=这段的区间val和,那么中间就可以取掉,说明当前的i,j可以相邻然后取掉

此时dp[i][j]=max(dp[i][j],dp[i+1][j-1]+val[i]+val[j])

 #include<bits/stdc++.h>
#define F(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
typedef long long ll; const int N=;
ll dp[N][N],sum[N];
int T,n,val[N],a[N]; ll up(ll &a,ll b){if(a<b)a=b;} ll DP()
{
memset(dp,,sizeof(dp));
F(len,,n)for(int i=;i+len<=n;i++)
{
int j=i+len;
F(k,i,j-)up(dp[i][j],dp[i][k]+dp[k+][j]);
if(__gcd(val[i],val[j])>)
{
if(i+==j)dp[i][j]=a[i]+a[j];
else if(dp[i+][j-]==sum[j-]-sum[i])up(dp[i][j],dp[i+][j-]+a[i]+a[j]);
}
}
return dp[][n];
} int main(){
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
F(i,,n)scanf("%d",val+i);
F(i,,n)scanf("%lld",sum+i),a[i]=sum[i];
F(i,,n)sum[i]+=sum[i-];
printf("%lld\n",DP());
}
return ;
}

hdu_5900_QSC and Master(区间DP)的更多相关文章

  1. 2016 年沈阳网络赛---QSC and Master(区间DP)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5900 Problem Description Every school has some legend ...

  2. HDU 5900 QSC and Master 区间DP

    QSC and Master Problem Description   Every school has some legends, Northeastern University is the s ...

  3. HDU5900 QSC and Master(区间DP + 最小费用最大流)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...

  4. HDU 5900 QSC and Master (区间DP)

    题目链接   http://acm.hdu.edu.cn/showproblem.php?pid=5900 题意:给出序列$A_{i}.key$和$A_{i}.value$,若当前相邻的两个数$A_{ ...

  5. 2016 ACM/ICPC Asia Regional Shenyang Online 1009/HDU 5900 区间dp

    QSC and Master Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  6. 区间dp专题练习

    区间dp专题练习 题意 1.Equal Sum Partitions ? 这嘛东西,\(n^2\)自己写去 \[\ \] \[\ \] 2.You Are the One 感觉自己智力被吊打 \(dp ...

  7. 【BZOJ-4380】Myjnie 区间DP

    4380: [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 162  Solved: ...

  8. 【POJ-1390】Blocks 区间DP

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5252   Accepted: 2165 Descriptio ...

  9. 区间DP LightOJ 1422 Halloween Costumes

    http://lightoj.com/volume_showproblem.php?problem=1422 做的第一道区间DP的题目,试水. 参考解题报告: http://www.cnblogs.c ...

随机推荐

  1. LintCode ---- 刷题总结

    对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始).如果不存在,则返回 -1. 基本:两重for循 ...

  2. GridView”的控件 必须放在具有 runat=server 的窗体标记内 “错误提示”

    在做导出数据到EXCEL程序中,出现了错误提示:类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记 解决办法  重写 VerifyRendering ...

  3. 将mysql的data目录移走方法

    如移动到"/home/mysql/data",我的mysql是装在/usr/local/mysql下的 1. 将/usr/local/mysql/data移动到/home/mysq ...

  4. mysql5.7.17安装问题

    在根目录新建data文件夹和my.ini,把ini复制到bin目录下才可以

  5. 鼠标形状css样式

    鼠标形状css样式 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  6. Redis同步操作失败的原因

    今天弄了下 Redis 的主从同步,设置方法其实很简单的,但崩溃的是遇到个莫名其妙的问题,始终同步不了.. 看了看错误日志: Unable to connect to MASTER: Invalid ...

  7. 注意Thread.interrupt()方法的真正作用并不是用来中断线程

      程序是很简易的.然而,在编程人员面前,多线程呈现出了一组新的难题,如果没有被恰当的解决,将导致意外的行为以及细微的.难以发现的错误.      在本篇文章中,我们针对这些难题之一:如何中断一个正在 ...

  8. C#下在图片文件本地

    //C#下载图片文件到本地,c#,c#下载,下载图片,下载文件,下载函数// 从图片地址下载图片到本地磁盘// 将二进制文件保存到磁盘 using System;using System.Drawin ...

  9. iOS消息推送相关

    远程推送 iOS开发之实现App消息推送:http://blog.csdn.net/shenjie12345678/article/details/41120637 国内90%以上的iOS开发者,对A ...

  10. JavaScript基本类型比较

    我们都知道js的基本类型有undefined,null,boolean,number,string; 当我们在进行基本数据类型的运算和比较时数据类型会根据运算符号和左右两边值的不同作如下转换: +   ...