zoukankan      html  css  js  c++  java
  • 过河

    题目:在一个夜黑风高的晚上,有n(n <= 50)个小朋友在桥的这边,现在他们需要过桥,但是由于桥很窄,每次只允许不大于两人通过,他们只有一个手电筒,所以每次过桥的两个人需要把手电筒带回来,i号小朋友过桥的时间为T[i],两个人过桥的总时间为二者中时间长者。问所有小朋友过桥的总时间最短是多少。

    输入:两行数据:第一行为小朋友个数n

    第二行有n个数,用空格隔开,分别是每个小朋友过桥的时间。

    输出:

    一行数据:所有小朋友过桥花费的最少时间。

    样例:

    输入

    4

    1 2  5 10

    输出

    17

    两种过桥方案:1.最小的和a[i]过,然后最小的回来2.最小和次小过,然后次小回和一个大的过,然后最小回

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int MAXN=1e5+10;
    int a[MAXN];
    int dp[MAXN];
    int main(){
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)cin>>a[i];
        sort(a+1,a+1+n);
        dp[1]=a[1];dp[2]=a[2];
        for(int i=3;i<=n;i++){
            dp[i]=min(dp[i-1]+a[1]+a[i],dp[i-2]+a[2]*2+a[i]+a[1]);
        }
        cout<<dp[n]<<endl;
    
    
    
        return 0;
    }
    View Code
  • 相关阅读:
    用email实现邮件模板
    jquery.transform
    学习 表单验证插件validate
    倒计时
    时间
    听慕课学自定义滚动条
    css3动画、边框、投影知识
    sql查询字段值只为汉字(桃)
    sql按照汉字首字母顺序排序(桃)
    poi导出excel文件(桃)
  • 原文地址:https://www.cnblogs.com/lin1874/p/12344630.html
Copyright © 2011-2022 走看看