zoukankan      html  css  js  c++  java
  • HDU

    题目链接

    http://acm.hdu.edu.cn/showproblem.php?pid=1260

    题意

    有N个人来买电影票 因为售票机的限制 可以同时 卖一张票 也可以同时卖两张 卖两张的话 两个人必须是相邻的

    给出 N 个 价格 是 一个一个买的时间花费

    给出 N - 1个价格 是 相邻的两个人一起买的时间花费 求出 最小的时间花费

    思路

    dp[i] 表示 卖到当前这个人的时间花费

    状态转移方程
    dp[i] = min(dp[i - 2] + b[i - 1], dp[i - 1] + a[i])

    当前这个人的时间花费 他 可以单独买 就是 dp[i - 1] + a[i]
    也可以 和 上一个人 一起买 就是 dp[i - 2] + b[i - 1] 去最优解

    AC代码

    #include <cstdio>
    #include <cstring>
    #include <ctype.h>
    #include <cstdlib>
    #include <cmath>
    #include <climits>
    #include <ctime>
    #include <iostream>
    #include <algorithm>
    #include <deque>
    #include <vector>
    #include <queue>
    #include <string>
    #include <map>
    #include <stack>
    #include <set>
    #include <list>
    #include <numeric>
    #include <sstream>
    #include <iomanip>
    #include <limits>
    
    #define CLR(a, b) memset(a, (b), sizeof(a))
    #define pb push_back
    
    using namespace std;
    typedef long long ll;
    typedef long double ld;
    typedef unsigned long long ull;
    typedef pair <int, int> pii;
    typedef pair <ll, ll> pll;
    typedef pair<string, int> psi;
    typedef pair<string, string> pss;
    
    const double PI = acos(-1.0);
    const double E = exp(1.0);
    const double eps = 1e-8;
    
    const int INF = 0x3f3f3f3f;
    const int maxn = 2e3 + 5;
    const int MOD = 1e9 + 7;
    
    int a[maxn];
    int b[maxn];
    int dp[maxn];
    
    int main()
    {
        int t;
        cin >> t;
        while (t--)
        {
            int n;
            scanf("%d", &n);
            for (int i = 1; i <= n; i++)
                scanf("%d", &a[i]);
            for (int i = 1; i < n; i++)
                scanf("%d", &b[i]);
            CLR(dp, 0);
            dp[0] = 0;
            dp[1] = a[1];
            for (int i = 2; i <= n; i++)
            {
                dp[i] = min(dp[i - 2] + b[i - 1], dp[i - 1] + a[i]);
            }
            int a = 8, b = 0, c = dp[n];
            b += c / 60;
            c %= 60;
            a += b / 60;
            b %= 60;
            printf("%02d:%02d:%02d am
    ", a, b, c);
        }
    }
    
  • 相关阅读:
    数值的整数次方
    Grid Sorting
    第K小的数
    图形学变换矩阵的分解
    神经网络理论简介(三)
    神经网络理论简介(二)
    神经网络理论简介(一)
    C/C++的内存对齐
    strcpy的实现
    C++对象模型简析
  • 原文地址:https://www.cnblogs.com/Dup4/p/9433112.html
Copyright © 2011-2022 走看看