• poj1661 (DP)


    题目链接:http://poj.org/problem?id=1661

    思路:

    把初始位置看成左,右端点均为x0,即长度为0,高度为y0的一个平台,按照平台高度从低到高排序。用dp[i][0],dp[i][1]分别表示从第i个平台的左端,右端到地面的最短时间。tmp=get_next(i,0)表示第i个平台左端点下的平台的编号(若为-1表示下方已无平台),同理tmp=get_next(i,1)表示第i个平台右端点下的平台编号。因为求最小值,所以要将dp初始化为inf,因此状态转移方程如下(注意若下降高度大于Max,则不处理,即dp[i][j]等于inf):

                   if(tmp>=0){
                        if(a[i].h-a[tmp].h<=Max)
                            dp[i][j]=a[i].h-a[tmp].h+min(dp[tmp][0]+a[i].x[j]-a[tmp].x[0],dp[tmp][1]+a[tmp].x[1]-a[i].x[j]);
                    }
                    else{
                        if(a[i].h<=Max)
                            dp[i][j]=a[i].h;
                    }
    详见代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 struct node{
     7     int x[2],h;
     8 }a[1005];
     9 
    10 bool cmp(node xx,node yy){
    11     return xx.h<yy.h;
    12 }
    13 
    14 int T,n,x0,y0,Max;
    15 int dp[1005][2];
    16 
    17 int get_next(int p,int k){
    18     int q=p-1;
    19     for(;q>=0;--q)
    20         if(a[q].h<a[p].h&&a[p].x[k]>=a[q].x[0]&&a[p].x[k]<=a[q].x[1])
    21             break;
    22     return q;
    23 }
    24 
    25 int main(){
    26     scanf("%d",&T);
    27     while(T--){
    28         memset(dp,0x3f,sizeof(dp));
    29         scanf("%d%d%d%d",&n,&x0,&y0,&Max);
    30         a[n].x[0]=a[n].x[1]=x0,a[n].h=y0;
    31         for(int i=0;i<n;++i)
    32             scanf("%d%d%d",&a[i].x[0],&a[i].x[1],&a[i].h);
    33         sort(a,a+n,cmp);
    34         int tmp;
    35         for(int i=0;i<=n;++i)
    36             for(int j=0;j<2;++j){
    37                 tmp=get_next(i,j);
    38                 if(tmp>=0){
    39                     if(a[i].h-a[tmp].h<=Max)
    40                         dp[i][j]=a[i].h-a[tmp].h+min(dp[tmp][0]+a[i].x[j]-a[tmp].x[0],dp[tmp][1]+a[tmp].x[1]-a[i].x[j]);
    41                 }
    42                 else{
    43                     if(a[i].h<=Max)
    44                         dp[i][j]=a[i].h;
    45                 }
    46             }
    47         printf("%d
    ",dp[n][0]);
    48     }
    49     return 0;
    50 }
  • 相关阅读:
    Sqli Labs Less-21-31
    sqli labs Less-11-20
    基础知识补充及sqli-labs Less 5-10
    sqli-labs Less 2-4
    Sql简单的搜索语句及sqli-labs的less-1
    Sqli labs相关环境的下载与安装
    行内元素没有宽高,块级元素有宽高
    Webview上传文件的那些坑
    [Android开发] 代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常(常见于listview中)
    AndroidSupportDesign之TabLayout使用详解
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/10425778.html
Copyright © 2020-2023  润新知