zoukankan      html  css  js  c++  java
  • 2018.12.1 万圣节的小L

    我回来啦


    试题描述

    今天是万圣节,小L同学开始了一年一度的讨要糖果游戏,但是在刚刚过去的比赛中小有成就的他打算给自己增加一点难度:如果没有讨到每一家的糖果就算输。

    已知小L共有n(n不大于10000)个邻居,他们都在同一条街上(可以近似看成一条直线),第i个邻居的坐标是xi。L同学的妈妈会在一开始把他送到任意邻居的门前。现在已知所有邻居会在di时间后休息(休息以后不能再去打扰),求访问完所有点的最短时间,如果无解输出“No solution”。

    输入
    输入第一行为一个正整数表示n,接下来n行,每行两个用空格隔开的数,分别表示第i个邻居的位置和休息时间。
    输出
    输出一个数,表示最短时间,无解输出“No solution”。
    输入示例
    5
    1 3
    3 1
    5 8
    8 19
    10 15
    输出示例
    11

     看起来是一个搜索或者dp

    然鹅发现搜索会TLE

    考虑dp:

    为了转移我们存储的数据我们不能采用普通的区间dp

    我们不难发现,为了遍历直线上的每一个点,其中一个端点一定是最后经过的点(自己可以推一下)

    所以我们用dp[i][j][0]表示从i到j结束在左端点的最短时间

    用dp[i][j][1]表示从i到j结束在右端点的最短时间

    于是对于i到j+1的区间在合法范围内就有了两种选择:从i到j区间转移或者从i-1到j+1区间转移


    但是发现空间开不下于是我们换一种存储方式

    为了节省空间我们只存储区间起点(压缩一维存储区间长度奇数偶数)

    于是我们又有了四种转移方式:

    对于从i到j的区间,从i-1到j转移(两种)或者从i到j-1转移(两种)

    关于转移:

    对于区间dp来讲,无后效性体现在从一步到下一步的转移

    所以转移的代价是从结束时间到下一个节点的距离

    关于合法:主要就是时间不要超过

    上代码

    #include<iostream>
    #define INF 0x3f3f3f3f
    using namespace std;
    int n,dp[2][20010][2],xx[10005],d[10005],nx;
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d%d",&xx[i],&d[i]);
        for(int i=1;i<=n;i++)dp[0][i][0]=dp[0][i][1]=0;
        for(int i=1;i<n;i++)
        {
            int x=nx;nx^=1;
            for(int j=1;j<=n-i;j++)
            {
                dp[nx][j][0]=min(dp[x][j+1][0]+xx[j+1]-xx[j],dp[x][j+1][1]+xx[j+i]-xx[j]);
                dp[nx][j][1]=min(dp[x][j][0]+xx[j+i]-xx[j],dp[x][j][1]+xx[j+i]-xx[j+i-1]);
                if(dp[nx][j][0]>d[j])dp[nx][j][0]=INF;
                if(dp[nx][j][1]>d[i+j])dp[nx][j][1]=INF;
            }
        }
        int ans=min(dp[nx][1][0],dp[nx][1][1]);
        if(ans>=INF)puts("No solution");
        else printf("%d",ans);
        return 0;
    }
    /*====年轻人,瞎搞是出不了省一的,这就是现实====*/
  • 相关阅读:
    jQuery制作焦点图(轮播图)
    mysql 存储引擎的选择
    linux 系统操作
    把网页转换成doc 格式的文件,方便用户下载PHP 方法
    多年级勾选
    zend studio 破解
    win7下安装Linux实现双系统全攻略
    【Linux】Linux中常用操作命令
    PHP xmapp 下面安装 Composer-Setup.exe
    ecshop中smarty比较操作符(eq,ne,neq)含义
  • 原文地址:https://www.cnblogs.com/qxds/p/10048762.html
Copyright © 2011-2022 走看看