POJ 3003 DP 寻路 记录路径

我一开始把M看成是每个a_i的上限了,这是致命的,因为这个题dfs暴力搜索+剪枝是过不了的因为M<=40,全部状态有2的四十次幂。

正解是DP,设dp[i][j]为在i处j高度的地方,蜘蛛侠所经历的的最大高度的最小值,这个dp[i][[j]一定是由dp[i - 1]j - x和dp[i - 1][j + x](如果j + x不超过1000)转移来的。由dp[i - 1][j - x]转移的话说明这步是上,另一个代表这步是下,分别按照对应的规则来转移”所经历的的最大高度的最小值“即可,最后检查dp[m][0]有没有值即可。

关于记录路径,这个对每一个dp[i][j],记录一个pre[i][j]表示这步的“上一步的高度”,最后的时候进行dfs打印即可

AC代码

#include <stdio.h>
#include <string.h> int n, t;
int aa[1005][1005];
int pr[1005][1005]; void b_print(int o, int x)
{
if (o > 1)
{
b_print(o - 1, pr[o][x]);
}
printf(pr[o][x] < x ? "U" : "D");
} int main()
{
scanf("%d", &t);
while (t--)
{
int i;
int j;
scanf("%d", &n);
for (i = 0; i <= n; ++i)
{
for (j = 0; j <= 1000; ++j)
{
aa[i][j] = 99999999;
}
}
for (j = 0; j <= 1000; ++j)
{
pr[1][j] = -1;
}
aa[0][0] = 0;
for (i = 1; i <= n; ++i)
{
int xx;
scanf("%d", &xx);
for (j = 0; j <= 1000; ++j)
{
if (j + xx <= 1000 && aa[i - 1][j + xx] < aa[i][j])
{
aa[i][j] = aa[i - 1][j + xx];
pr[i][j] = j + xx;
}
if (j - xx >= 0 && aa[i - 1][j - xx] < aa[i][j] && aa[i][j] > j)
{
aa[i][j] = aa[i - 1][j - xx] < j ? j : aa[i - 1][j - xx];
pr[i][j] = j - xx;
}
}
}
if (aa[n][0] == 99999999)
{
printf("IMPOSSIBLE");
}
else
{
b_print(n, 0);
}
printf("\n");
}
return 0;
}

POJ 3003 DP 寻路 记录路径的更多相关文章

  1. POJ 3984 迷宫问题 记录路径的广搜

    主要是学一下如何在广搜中记录路径:每找到一个点我就记录下这个点是由那个点得来的,这样我找到最后个点后,我就可以通过回溯得到我走过的路径,具体看代码吧~ #include<cstdio> # ...

  2. Pots POJ - 3414 (搜索+记录路径)

    Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22688   Accepted: 9626   Special J ...

  3. Q - 迷宫问题 POJ - 3984(BFS / DFS + 记录路径)

    Q - 迷宫问题 POJ - 3984 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, ...

  4. POJ 3436:ACM Computer Factory(最大流记录路径)

    http://poj.org/problem?id=3436 题意:题意很难懂.给出P N.接下来N行代表N个机器,每一行有2*P+1个数字 第一个数代表容量,第2~P+1个数代表输入,第P+2到2* ...

  5. hdu1074 状压DP、栈实现记录路径

    题意:给了几门学科作业.它们的截止提交期限(天数).它们的需要完成的时间(天数),每项作业在截止日期后每拖延一天扣一学分,算最少扣的学分和其完成顺序. 一开始做的时候,只是听说过状态压缩这个神奇的东西 ...

  6. hdu 1074(状态压缩dp+记录路径)

    题意:给了n个家庭作业,然后给了每个家庭作业的完成期限和花费的实践,如果完成时间超过了期限,那么就要扣除分数,然后让你找出一个最优方案使扣除的分数最少,当存在多种方案时,输出字典序最小的那种,因为题意 ...

  7. PAT L3-001 凑零钱(01背包dp记录路径)

    韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有104枚来自各个星球的硬币,需要请你帮她盘算一下,是 ...

  8. POJ.3894 迷宫问题 (BFS+记录路径)

    POJ.3894 迷宫问题 (BFS+记录路径) 题意分析 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, ...

  9. Codeforces Round #436 (Div. 2) E. Fire(dp 记录路径)

    E. Fire time limit per test 2 seconds memory limit per test 256 megabytes input standard input outpu ...

  10. poj 3414 Pots 【BFS+记录路径 】

    //yy:昨天看着这题突然有点懵,不知道怎么记录路径,然后交给房教了,,,然后默默去写另一个bfs,想清楚思路后花了半小时写了120+行的代码然后出现奇葩的CE,看完FAQ改了之后又WA了.然后第一次 ...

随机推荐

  1. IntelliJ IDEA安装中文插件

    1.运行IntelliJ IDEA程序2.点击左上角"File"//文件3.点击下拉的"Settings" //设置4.点击"Plugins" ...

  2. snowboy 无法 install

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple snowboy Looking in indexes: https://pypi.tun ...

  3. 解决 Steam 无法自动登录的问题

    前言 劳动节假期闲的没事,重装一下电脑,结果电脑的 Steam 不会自动登录了,每次重启电脑就要重新输入密码和令牌.查了一下居然是 Windows 凭据管理器默认不会自动启动的问题. 解决方法 打开计 ...

  4. Hooks的核心原理梳理

    我们前端都在诟病专业版,它的组件,它的耦合嵌套之深,它的性能. 我们希望改善,我们认为,如果--就好了. 如果重构就好了,如果技术栈统一就好了,如果有规范就好了. 其实,不用等,我们只要在写代码,就可 ...

  5. alibaba fastjson的JsonObject有序的实现和源码分析

    介绍 FastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean.在使用的过程中, ...

  6. JVM核心知识体系(转)

    1.问题 1.如何理解类文件结构布局? 2.如何应用类加载器的工作原理进行将应用辗转腾挪? 3.热部署与热替换有何区别,如何隔离类冲突? 4.JVM如何管理内存,有何内存淘汰机制? 5.JVM执行引擎 ...

  7. vue element ui 组件使用 -form 表单

    表单验证rules 绑定是规则 也可以自定义规则,:model是表单的数据源 el-form-item 标签里面prop的名字要和数据源的名字一致,才能验证生效 ;提交时调用this.$refs[fo ...

  8. dsBlog前后台博客系统

    博客简介:本博客采用Spring Boot + LayUI做为基础,进行的博客系统开发,与boot+vue相比,更为适合开发简单的系统,并且更容易上手,简单!高效!更易上手! Spring Boot ...

  9. Hadoop学习(一) 搭建伪分布式集群

    文章结构 1.准备工作 1.1 配置IP 1.2 关闭防火墙 1.3 修改主机名并与IP绑定 1.4 创建新用户 1.5 配置免密匙 2.安装并配置Hadoop伪分布式集群 2.1 安装Java 2. ...

  10. led灯实现跑马灯效果,达到设定时间(2秒)两LED灯全部亮起,持续时间1秒,而后重新恢复跑马灯效果;

    #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef ...