• POJ3253


    将一块很长的木板切割成N块,长度分别为L1、L2、…、LN。每次切割需要的开销为当前木板的长度。求出将木板切割完最小开销是多少。

    在N块木板中取最短和次短的相加,加到开销中,再在N-1块木板中重复此操作,直到木板数为1。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 using namespace std;
     5 
     6 #define MAX_N 30000
     7 
     8 int N, L[MAX_N];
     9 
    10 
    11 int solve()
    12 {
    13     long long ans = 0;
    14     //直到计算到木板为1块为止
    15     while (N > 1)
    16     {
    17         //求出最短板mii1和次短板mii2
    18         int mii1 = 0, mii2 = 1;
    19         if (L[mii1] > L[mii2]) swap(mii1, mii2);
    20 
    21         for (int i = 2; i < N; i++)
    22         {
    23             if (L[i] < L[mii1])
    24             {
    25                 mii2 = mii1;
    26                 mii1 = i;
    27             }
    28             else if (L[i] < L[mii2])
    29             {
    30                 mii2 = i;
    31             }
    32         }
    33 
    34         //将两块木板合并
    35         int t = L[mii1] + L[mii2];
    36         ans += t;
    37 
    38         //mii1存储两块木板的和,mii2存储最后一块木板
    39         if (mii1 == N-1) swap(mii1, mii2);
    40         L[mii1] = t;
    41         L[mii2] = L[N-1];
    42         N--;
    43     }
    44 
    45     printf("%lld
    ", ans);
    46 }
    47 
    48 int main()
    49 {
    50     cin >> N;
    51     for (int i = 0; i < N; i++)
    52         cin >> L[i];
    53     solve();
    54     return 0;
    55 }
  • 相关阅读:
    查看java代码,命令,ctrl+r
    JVM调优
    springboot线程池
    jpa
    复制java对象,jpa,save
    springboot添加切面
    gunicorn 实现 gevent 多线程
    经典算法
    python-生僻字转拼音
    HTML介绍
  • 原文地址:https://www.cnblogs.com/bournet/p/4010619.html
Copyright © 2020-2023  润新知