• JDOJ 1928: 排队买票


    JDOJ 1928: 排队买票

    JDOJ传送门

    Description

    一场演唱会即将举行。现有n个歌迷排队买票,一个人买一张,而售票处规定,一个人每次最多只能买两张票。假设第i位歌迷买一张票需要时间Ti(1≤i≤n),队伍中相邻的两位歌迷(第j个人和第j+1个人)也可以由其中一个人买两张票,而另一位就可以不用排队了,则这两位歌迷买两张票的时间变为Rj。现给出n, Ti和Rj,求使每个人都买到票的最短时间。

    Input

    第一行,一个整数n,代表有n个人买票 (n < 104)

    第二行有n个数,Ti表示第i个人买票耗时 (数与数间用空格间隔)

    第三行有n-1个数,Rj表示第j个人,同时买j和j+1两张票耗时 (数与数间用空格间隔)

    Output

    输出一行,一个整数,所有人都买到票的最短时间

    Sample Input

    5 1 2 3 4 5 3 4 5 8

    Sample Output

    13

    题解:

    线性动归例题。

    状态与转移方程已经写到代码里,请大家自行取阅。

    初值请设置好。

    答案就是dp[n]。

    上代码:

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int maxn=1e4+10;
    int n;
    int t[maxn],r[maxn];
    int dp[maxn];//dp[i]表示前i个人买到票的最短时间
    //dp[i]=min(dp[i-1]+t[i],dp[i-2]+r[i-1]);
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&t[i]);
        for(int i=1;i<n;i++)
            scanf("%d",&r[i]);
        dp[1]=t[1];
        for(int i=2;i<=n;i++)
            dp[i]=min(dp[i-1]+t[i],dp[i-2]+r[i-1]);
        printf("%d",dp[n]);
        return 0;
    }
    
  • 相关阅读:
    Mac上使用Charles抓取https
    使用react-navigation 报错isMounted
    create-react-app创建出来项目,如何设置CSS模块化?
    Markdown 常用语法整理
    Git安装和使用
    页面重定向跳转
    AntDesign 踩坑大全
    js实现数组、对象深度克隆的两种办法
    wamp中mysql安装时能启动,重启后无法启动的解决办法
    前端开发工具收藏
  • 原文地址:https://www.cnblogs.com/fusiwei/p/11427532.html
Copyright © 2020-2023  润新知