zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    LPC 网络编程
    LPC 语言基础
    (lua) 基于cocos 的插入光效
    lua_table 学习
    lua 语言基础
    C++ 三大特性:封装、继承、多态性
    C++的编译预处理
    C++ 用变量定义数组
    C++ STL常用容器浅析
    拦截器的文章 写的可以!
  • 原文地址:https://www.cnblogs.com/bournet/p/4010619.html
Copyright © 2011-2022 走看看