• HDU


    input:

    2
    2
    20 25
    40
    1
    8
    

      

    output:

    08:00:40 am
    08:00:08 am
    

      

    题目大意:

    有n个人,每个人的取票时间为single[i],如果同时给相邻两个人的取票时间为twice[i],求所有人都取完票的最
    短时间。
    

      

    分析:

    dp。dp[i]=到第i个人所要花的最短时间。转移方程特别好想:
    dp[i]=min(dp[i-1]+single[i],dp[i-2]+twice[i-1])。
    

      

    code:

    #define frp
    
    #include<bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;
    const ll INF = 0x3f3f3f3f;
    const ll inf = 0x7fffff;
    const int maxn = 1000;
    const int MAXN = 10000;
    int dp[MAXN];
    int single[MAXN],twice[MAXN];
    void solve() {
        int T;
        cin>>T;
        while(T--){
            int n;
            cin>>n;
            for(int i=1;i<=n;i++){
                cin>>single[i];
            }
            for(int i=1;i<=n-1;i++){
                cin>>twice[i];
            }
            dp[0]=0;
            dp[1]=single[1];
            for(int i=2;i<=n;i++){
                dp[i]=min(dp[i-1]+single[i],dp[i-2]+twice[i-1]);
            }
            int ansTime=dp[n];
            int hh=ansTime/3600;
            int mm=(ansTime%3600)/60;
            int ss=ansTime%60;
            hh+=8;
            if(hh>12){
                printf("%02d:%02d:%02d pm
    ",hh-12,mm,ss);
            }else{
                printf("%02d:%02d:%02d am
    ",hh,mm,ss);
            }
        }
    }
    
    int main() {
    //    ios_base::sync_with_stdio(0);
    //    cin.tie(0);
    //    cout.tie(0);
    #ifdef frp
        freopen("D:\coding\c_coding\in.txt", "r", stdin);
    //    freopen("D:\coding\c_coding\out.txt", "w", stdout);
    #endif
        solve();
        return 0;
    }
    

      

  • 相关阅读:
    点到圆的切点
    两圆交点
    问n条平行于x,y的直线交点个数
    凸包与直线的关系
    Kuangbin的计算几何模板
    最大空凸包
    树链剖分模板题
    笔记1
    面试题2
    python utf-8 转码问题
  • 原文地址:https://www.cnblogs.com/visualVK/p/9695568.html
Copyright © 2020-2023  润新知