[POJ 2397] Spiderman

Link:

POJ 2397 传送门

Solution:

设$dp[i][j]$表示第$i$步走到$j$高度时经过的最高高度

分向上走和向下走两种方式转移即可

注意记录路径,最后输出时要逆序输出

逆序输出时可以考虑利用递归方式输出

Code:

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>

using namespace std;
const int INF=0x3f3f3f3f;
int T,n,d,dp[55][1005],pre[55][1005];

void print(int cur,int h)
{
    if(pre[cur][h]==INF || cur<0) return;
    print(cur-1,pre[cur][h]);
    printf("%c",(pre[cur][h]>h)?‘D‘:‘U‘);
}

int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        memset(dp,0x3f,sizeof(dp));memset(pre,0x3f,sizeof(pre));
        dp[0][0]=0;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&d);
            for(int j=0;j<=1000;j++)
            {
                if(dp[i][j]==INF) continue;
                if(j+d<=1000 && dp[i+1][j+d]>max(dp[i][j],j+d))
                    dp[i+1][j+d]=max(dp[i][j],j+d),pre[i+1][j+d]=j;
                if(j-d>=0 && dp[i+1][j-d]>dp[i][j])
                    dp[i+1][j-d]=dp[i][j],pre[i+1][j-d]=j;
            }
        }
        if(dp[n][0]==INF) puts("IMPOSSIBLE");
        else print(n,0),puts("");
    }
    return 0;
}

原文地址:https://www.cnblogs.com/newera/p/9157478.html

时间: 2024-11-06 12:30:39

[POJ 2397] Spiderman的相关文章

POJ 1925 Spiderman(DP)

题目链接 题意 : Spiderman从最左边的楼通过将蛛丝粘到后边的某座楼顶,然后荡过去,接着发射蛛丝荡过去,直到到达最后的楼.问最少发射几次蛛丝. 思路 :从横坐标 j 能跳过建筑物 i 需满足: (p[i].x - j)*(p[i].x - j) <= p[i].y*p[i].y  - (p[i].y - p[0].y)*(p[i].y-p[0].y). 从横坐标 j 经建筑物 i 后 到达横坐标 2 * p[i].x - j. 所以状态转移方程是: dp[2 * p[i] .x- j]

poj 2397

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int dp[50][1050],pr[50][1050]; int inf=0x3f3f3f3f; void dfs(int k,int d) { if(pr[k][d]!=-1) { dfs(k-1,pr[k][d]); printf("%c",(pr[k][d]>d)?'D':'U');

[转] POJ DP问题

列表一:经典题目题号:容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740, 1742, 1887, 1926, 1936, 1952, 1953, 1958, 1959, 1962, 1975, 1989, 2018, 2029, 2039, 2063, 20

DP题目列表/弟屁专题

声明: 1.这份列表不是我原创的,放到这里便于自己浏览和查找题目. ※最近更新:Poj斜率优化题目 1180,2018,3709 列表一:经典题目题号:容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740, 1742, 1887, 1926, 1936, 195

ACM训练方案-POJ题目分类

ACM训练方案-POJ题目分类 博客分类: 算法 ACM online Judge 中国: 浙江大学(ZJU):http://acm.zju.edu.cn/ 北京大学(PKU):http://acm.pku.edu.cn/JudgeOnline/ 杭州电子科技大学(HDU):http://acm.hdu.edu.cn/ 中国科技大学(USTC):http://acm.ustc.edu.cn/ 北京航天航空大学(BUAA)http://acm.buaa.edu.cn/oj/index.php 南京

转载:poj题目分类(侵删)

转载:from: POJ:http://blog.csdn.net/qq_28236309/article/details/47818407 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K–0.50K:中短代码:0.51K–1.00K:中等代码量:1.01K–2.00K:长代码:2.01K以上. 短:1147.1163.1922.2211.2215.2229.2232.2234.2242.2245.2262.2301.2309.2313.2334.2346.2348

POJ - 3186 Treats for the Cows (区间DP)

题目链接:http://poj.org/problem?id=3186 题意:给定一组序列,取n次,每次可以取序列最前面的数或最后面的数,第n次出来就乘n,然后求和的最大值. 题解:用dp[i][j]表示i~j区间和的最大值,然后根据这个状态可以从删前和删后转移过来,推出状态转移方程: dp[i][j]=max(dp[i+1][j]+value[i]*k,dp[i][j-1]+value[j]*k) 1 #include <iostream> 2 #include <algorithm&

POJ 2533 - Longest Ordered Subsequence(最长上升子序列) 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:http://poj.org/problem?id=2533 Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequence of the given numeric sequence (a1, a2, ..., aN) be any sequence (ai1, ai2, ..., aiK)

POJ——T2271 Guardian of Decency

http://poj.org/problem?id=2771 Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5932   Accepted: 2463 Description Frank N. Stein is a very conservative high-school teacher. He wants to take some of his students on an excursion, but he is