第一版请见:直通

话不多说,直接上题

1.P1040 加分二叉树

直通

思路:

  已知中序遍历,相当于一段区间了,所以我们枚举一个k,如果以k为根节点,能够将分数更新,那么这段区间的根节点就置为k,最后dp[1][n]就是得分;

  核心代码:

	for(int i=n-1; i>=1; i--)
for(int j=i+1; j<=n; j++)
for(int k=i; k<=j; k++)
if(dp[i][k-1]*dp[k+1][j]+a[k]>dp[i][j])
p[i][j]=k,dp[i][j]=dp[i][k-1]*dp[k+1][j]+a[k];

坑点:

  别忘了dp数组的初始值为1,不然会“爆零”

上代码:

#include <iostream>
#include <cstdio>
using namespace std; const int M = ;
int n;
int a[M],p[M][M],dp[M][M]; void print(int l,int r) {
if(l>r) return;
printf("%d ",p[l][r]);
print(l,p[l][r]-);
print(p[l][r]+,r);
} int main() {
scanf("%d",&n);
for(int i=; i<=n; i++)
for(int j=; j<=n; j++)
dp[i][j]=;
for(int i=; i<=n; i++) {
scanf("%d",&a[i]);
dp[i][i]=a[i];
p[i][i]=i;
}
for(int i=n-; i>=; i--)
for(int j=i+; j<=n; j++)
for(int k=i; k<=j; k++)
if(dp[i][k-]*dp[k+][j]+a[k]>dp[i][j])
p[i][j]=k,dp[i][j]=dp[i][k-]*dp[k+][j]+a[k];
printf("%d\n",dp[][n]);
print(,n);
return ;
}

2.P1052 过河

直通

思路:

  枚举左端点i,能够跳的步数j,以及st数组(存储是否有石头)

      那么转移方程就是:

        dp[i]=min(dp[i],dp[i-j]+st[i]);

  又因为是取min,所以需要进行初始化

坑点:

  题目中说道:当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥

  所以我们最后进行输出的时候不能够只输出dp[l],而要在dp[l~l+t]之间进行取min

上代码:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std; const int Mod = ; //1~10的最小公倍数,是路径压缩的关键!
//因为2520步是它们的倍数,所以一定会直接跳过去,不用管是用多么大的步数跳的
const int L = ;
int l,s,t,m,ans;
int a[L],y[L],st[L],dp[L];
//y[] : 压缩后每块石子之前需要跳的步数 int main() {
scanf("%d%d%d%d",&l,&s,&t,&m);
ans=m; //最多跳过m块石头
for(int i=; i<=m; i++) scanf("%d",&a[i]);
sort(a+,a++m);
for(int i=; i<=m; i++) y[i]=(a[i]-a[i-])%Mod; //状压
for(int i=; i<=m; i++) a[i]=a[i-]+y[i],st[a[i]]=; //重新将a进行赋值,并标记石头
l=a[m]; //更新l值
for(int i=; i<=l+m; i++) dp[i]=m; //赋对于该题来说的最大值m
dp[]=; //起点处不含石头
for(int i=s; i<l+t; i++)
for(int j=s; j<=t; j++) //枚举跳的步数
if(i-j>=) dp[i]=min(dp[i],dp[i-j]+st[i]); //dp转移方程
for(int i=l; i<l+t; i++) ans=min(ans,dp[i]); //最远跳到l+t
printf("%d",ans);
return ;
}

DP(第二版)的更多相关文章

  1. 计算机视觉与模式识别代码合集第二版three

    计算机视觉与模式识别代码合集第二版three     Topic Name Reference code Optical Flow Horn and Schunck's Optical Flow   ...

  2. 读书笔记:JavaScript DOM 编程艺术(第二版)

    读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...

  3. 《selenium2 Java 自动化测试实战(第二版)》 更新2016.5.3

    java 版来了!! 本文档在<selenium2 Python 自动化测试实战>的基础上,将代码与实例替换为java ,当然,部分章节有变更.这主要更语言本身的特点有关.集合和java下 ...

  4. 《Java程序设计与数据结构教程(第二版)》学习指导

    <Java程序设计与数据结构教程(第二版)>学习指导 欢迎关注"rocedu"微信公众号(手机上长按二维码) 做中教,做中学,实践中共同进步! 原文地址:http:// ...

  5. (转载)持续集成(第二版)[来自:Martin Fowler]

    转载自:iTech的博客 持续集成(第二版) 作者:Martin Fowler 译者:雷镇 持续集成 是一种软件开发实践.在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以 ...

  6. Learning ROS for Robotics Programming - Second Edition(《学习ROS机器人编程-第二版》)

    Learning ROS for Robotics Programming - Second Edition <学习ROS机器人编程-第二版> ----Your one-stop guid ...

  7. Lucene.net站内搜索—6、站内搜索第二版

    目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...

  8. android 常用小功能(第二版)

    经历过一段岁月,转眼2013的半年都过去了,第二版整理好的小功能,答应大家发布的,直到今日,终于和大家相见了,第二版没有第一版多,大家也可以去参考第一版的内容,希望大家使用愉快! 目录: 1.获取当前 ...

  9. selenium webdriver (python) 第二版

    前言 对于大多软件测试人员来讲缺乏编程经验(指项目开发经验,大学的C 语言算很基础的编程知识)一直是难以逾越的鸿沟,并不是说测试比开发人员智商低,是国内的大多测试岗位是功能测试为主,在工作时间中,我们 ...

  10. J2msi 自己制作的把exe打成安装包简易GUI程序(第二版 带DLL注册)

    J2msi 自己制作的把exe打成安装包简易GUI程序(第二版 带DLL注册) 之前那一版本(http://www.cnblogs.com/rojas/p/4794684.html)没考虑 DLL 注 ...

随机推荐

  1. poj 3253 哈夫曼贪心

    http://poj.org/problem?id=3253 题意: FJ需要修补牧场的围栏,他需要 N 块长度为 Li 的木头(N planks of woods).开始时,FJ只有一块无限长的木板 ...

  2. (四)Spring Boot之配置文件-多环境配置

    一.Properties多环境配置 1. application.properties配置激活选项 spring.profiles.active=dev 2.添加其他配置文件 3.结果 applica ...

  3. JS密码强度检测

    //校验密码强度---沒有匹配到以下級別就提示 function checkPassWord(value){ // 0: 表示第一个级别 1:表示第二个级别 2:表示第三个级别 // 3: 表示第四个 ...

  4. centos6/7启动故障排错

    centos6启动流程修复: 实验一:删除initramfs-2.6.32-754.el6.x86_64.img进行恢复 该文件很重要initramfs-2.6.32-754.el6.x86_64.i ...

  5. dbm和发射功率得对照表

    原文链接:https://blog.csdn.net/nicholas_dlut/article/details/80950163dBm mW 下面是dbm和发射功率得对照表. 基本上市面上所有的无线 ...

  6. Java 中的多态,一次讲个够之继承关系中的多态

    多态是继封装.继承之后,面向对象的第三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一个 ...

  7. idou教你学Istio10 : 如何用Istio实现K8S Egress流量管理

    上一篇我们了解了如何控制入口流量,本文主要介绍在使用Istio时如何访问集群外服务,即对出口流量的管理. 默认安装的Istio是不能直接对集群外部服务进行访问的,如果需要将外部服务暴露给 Istio ...

  8. 队列(queue)和堆栈(stack)的学习

    队列 1 . 先进先出  .队列尾进行插入,队列头进行删除,获取,修改.      -----first come  ,first served .   --first in  .first  out ...

  9. mongodb的基本操作之数据写入和查询

    连接到mongodb服务器后,查看当前数据中有多少数据库 show dbs   切换数据库 use conf     删除数据库 db.dropDatabase() 再次使用 use conf 切换数 ...

  10. 阿里云服务器搭建gitlab

    参考这位大神的博客 https://blog.csdn.net/zhaoyanjun6/article/details/79144175 安装邮件通知服务系统时,报了如下错误:send-mail: f ...