Sort HDU5884(二分+多叉哈夫曼樹)

HDU5884 Sort

題意:有n個序列要進行歸并,每次歸并的代價是兩個序列的長度的和,要求最終的代價不能超過規定的T,求在此前提下一次能同時進行歸并的序列的個數k。

思路:還是太單純,看完題目一直以為要用歸并排序來解題,如果已經看過多叉哈夫曼樹的知識的話估計就不會這樣了。先二分查找這個k,然后用多叉哈夫曼樹來判斷這個k是不是還能再變小。用兩個隊列來實現多叉哈夫曼樹。

PS:如果不進行提前處理的話,最后一次的歸并可能就湊不齊k個來了,所以需要提前處理一下。

代碼:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <set>
#include <queue>
using namespace std;
const int maxn = 1e5 + 100;
typedef long long ll;
//typedef pair<int,int> P;
queue<ll> q1;
queue<ll> q2;
int T,n;
ll a[maxn];
ll t;bool Hufman(int x)
{while (!q1.empty()) q1.pop();while (!q2.empty()) q2.pop();int tt = (n - 1) % (x - 1);if (tt){for (int i = 1; i <= x - 1 - tt; i++)//添加虛構0,使得最后一次能湊齊k個序列,手動模擬了一下求tt的過程,q1.push(0);//但不明白n-1具體的原因,不知是不是固定的模式
    }for (int i = 1; i <= n; i++)q1.push(a[i]);ll sum = 0;while (1){ll tem = 0;for (int i = 1; i <= x; i++){if (q1.empty() && q2.empty())break;if (q1.empty()){tem += q2.front();q2.pop();}else if (q2.empty()){tem += q1.front();q1.pop();}else{int tx, ty;tx = q1.front();ty = q2.front();if (tx < ty){tem += tx;q1.pop();}else{tem += ty;q2.pop();}}}sum += tem;if (q1.empty() && q2.empty())break;q2.push(tem);//q2這個序列一定是有序的
    }if (sum <= t)return 1;elsereturn 0;
}int main()
{scanf("%d", &T);while (T--){scanf("%d%lld", &n, &t);for (int i = 1; i <= n; i++)scanf("%lld", &a[i]);sort(a + 1, a + 1 + n);int st = 2, en = n;while (st < en){int mid = (st + en) / 2;if (Hufman(mid))en = mid;elsest = mid + 1;//printf("GG\n");
        }printf("%d\n", st);}return 0;
}
View Code

?

轉載于:https://www.cnblogs.com/sykline/p/9737772.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396641.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396641.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396641.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python來源是什么_python起源?為什么使用python?直至愛上python的五個理由

原標題&#xff1a;python起源&#xff1f;為什么使用python&#xff1f;直至愛上python的五個理由Python的創始人&#xff0c;吉多范羅蘇姆&#xff0c;是一名荷蘭計算機程序員&#xff0c;他作為 Python 程序設計語言的作者而為人們熟知。在 Python 社區&#xff0c;吉多范羅…

Linux系統(五)負載均衡LVS集群之DR模式

序言 DR模式是lvs集群中三種負載均衡模式的其中一種&#xff0c;那么上一篇中我寫啦關于NAT模式的搭建與原理&#xff0c;為什么還要有DR模式與IP隧道模式呢&#xff1f; 首先我們來看3張圖。LVS/NAT模式如下圖&#xff1a; LVS/IP隧道模式&#xff0c;如下圖&#xff1a; LVS/…

Redux API之applyMiddleware

applyMiddleware(...middlewares) 使用包含自定義功能的 middleware 來擴展 Redux 是一種推薦的方式。Middleware 可以讓你包裝 store 的dispatch 方法來達到你想要的目的。同時&#xff0c; middleware 還擁有“可組合”這一關鍵特性。多個 middleware 可以被組合到一起使用&a…

計算機2018創業方向,推薦2018年創業的方向

原標題&#xff1a;推薦2018年創業的方向1 新電商傳統的零售業收到互聯網電商的重沖擊&#xff0c;從而進行線上線下的結合是必然的趨勢&#xff0c;新零售&#xff0c;新電商&#xff0c;是幾千萬零售企業成功轉型的必然之路&#xff0c;學習一套全面的新電商轉型的方法&#…

包無法安裝_詳細教程 | 安裝Python編程環境以及使用OpenpyXl操作Excel

詳細教程 | 安裝Python編程環境以及使用OpenpyXl操作Excel注意&#xff1a;下列教程為 Windows7 64位&#xff1b;Windows 10有部分步驟有差異&#xff0c;請參考使用&#xff01;01 下載Python程序安裝包首先前往Python官網 www.python.org,進入官網點擊 Downloads,然后點擊 W…

Activity、Fragment、Dialog基類簡單整理

版權聲明&#xff1a;本文為HaiyuKing原創文章&#xff0c;轉載請注明出處&#xff01; 概述 這里簡單記錄下Activity、Fragment、Dialog基類中的常規寫法&#xff0c;后續根據項目需求進行相應的擴展。 BaseActivity.java package com.why.project.myapptemplet.activity;impo…

request重定向_golang不想http自動處理重定向的解決方案

前言有時候發送http請求不想讓庫自動幫忙處理重定向&#xff0c;庫里面默認的是會把所有重定向都完成一遍&#xff0c;結果就是最后一個沒有重定向的請求的結果。因此需要一種方案直接獲取首次訪問的結果&#xff0c;不走重定向。go的http庫里面是使用如下代碼檢查重定向的&…

C語言項目開發-項目架構和編程命名規范

一個項目的流程&#xff1a;1、公司市場人員與客戶交流&#xff0c;了解客戶、引導客戶使用公司最優資源并產出一份市場需求文檔 2、公司需求人員&#xff08;BA&#xff09;與客戶交流&#xff0c;了解客戶需求并產出一個軟件需求文檔 3、項目經理、開發小組成員、需求人員&am…

ajax登錄驗證的原理,ajax用戶登錄驗證-get和post提交方式,與工作原理—2018-8-15...

ajax用戶登錄驗證&#xff1a;實例html>Ajax實戰:表單驗證用戶登錄郵箱: 密碼: 提交let btn document.getElementsByTagName(button)[0];btn.onclick function () {//1.創建xhr對象let xhr new XMLHttpRequest();//2.監聽響應狀態xhr.onreadystatechange function(){// …

將Python腳本打包成可執行文件

Python是一個腳本語言&#xff0c;被解釋器解釋執行。它的發布方式&#xff1a; .py文件&#xff1a;對于開源項目或者源碼沒那么重要的&#xff0c;直接提供源碼&#xff0c;需要使用者自行安裝Python并且安裝依賴的各種庫。&#xff08;Python官方的各種安裝包就是這樣做的&a…

float foo=42e1為什么錯_為什么重寫了equals()也要重寫hashCode()

小Hub領讀&#xff1a;雖然是很基礎的一篇文章&#xff0c;但是對于equals、hashcode兩個方法&#xff0c;相信很多人都與其中的規則不熟悉&#xff0c;來跟著小Hub花個8分鐘回顧一下&#xff01;作者&#xff1a;不學無數的程序員https://my.oschina.net/u/4030990/blog/31341…

ssh客戶端_一款基于TAS框架的SSH客戶端蠕蟲

TEA是一款基于TAS框架的SSH客戶端蠕蟲&#xff0c;從本質上說&#xff0c;它是一個仿冒的SSH客戶端&#xff0c;它能夠修改tty輸入/輸出來實現任意命令執行&#xff0c;或通過SSH連接來上傳自身以實現滲透感染。為了實現該工具的正常功能&#xff0c;遠程主機需要滿足以下條件&…

Selenium入門11 滾動條控制(通過js)

這一節要有js基礎。做web端的UI自動化必須要有html&#xff0c;css&#xff0c;javascript前端基礎。 滾動條控制&#xff1a; 1 移動垂直滾動條 document.documentElement.scrollTop 2 移動垂直滾動條 document.documentElement.scrollLeft 3 找到某個元素&#xff0c;移動到可…

Qt之QNetworkInterface

簡述 QNetworkInterface類負責提供主機的IP地址和網絡接口的列表。 QNetworkInterface表示了當前程序正在運行時與主機綁定的一個網絡接口。每個網絡接口可能包含0個或多個IP地址&#xff0c;每個IP地址都可選擇性地與一個子網掩碼和/或一個廣播地址相關聯。這樣的列表可以通過…

第二周計劃

上周計劃回顧 3.5 ~ 3.11 數據&#xff1a; 評師網爬取&#xff0c;完成&#xff1a;2k條記錄 finished后端 數據結構 技術選型 學校API封裝未完成&#xff1a;后端負責人出差 工作暫停產品 功能設計&#xff1a;主要功能提交&#xff1a;原型圖 幾個頁面 每個頁面大概功能完成…

python編程軟件排行榜_PYPL 9月編程語言排行榜發布 Python一枝獨秀

開發者可以將 PYPL 作為一個參考&#xff0c;決定學習何種語言或 IDE&#xff0c;或者在新的軟件項目中使用何種語言或數據庫。9 月份的榜單如下&#xff1a;前五名分別是 Python、Java、JavaScript、C# 與 PHP。相比去年 9 月份的數據&#xff0c;除了 Python 大幅上漲了 4.5%…

分享到系統面板_win7電腦沒有nvidia控制面板怎么辦【解決方法】

我們在使用電腦的時候&#xff0c;當電腦顯卡出現問題導致屏幕畫面不清晰時&#xff0c;可以使用win7系統自帶nvidia控制面板&#xff0c;它能夠對顯卡進行設置&#xff0c;提升顯卡功能&#xff0c;不過很多電腦用戶點擊nvidia控制面板時卻提示nvidia顯示設置不可用&#xff0…

Python之數據加密與解密(hashlib、hmac、random、base64、pycrypto)--轉載

本文內容 數據加密概述Python中實現數據加密的模塊簡介hashlib與hmac模塊介紹random與secrets模塊介紹base64模塊介紹pycrypto模塊介紹總結參考文檔提示&#xff1a; Python 2.7中的str是字節串&#xff0c;而Python 3.x中的str是字符串。本文中的代碼都是通過Python 2.7實現的…

day3-文件操作之基本操作

一、文件的基本操作 文件內容&#xff1a; Somehow, it seems the love I knew was always the most destructive kind 不知為何&#xff0c;我經歷的愛情總是最具毀滅性的的那種 Yesterday when I was young 昨日當我年少輕狂1、read() 當read()函數中傳入整數(int)參數&#…

QT連接多種數據庫f方法及測試

QT提供了對多種數據庫的訪問支持&#xff0c;對SQL Server也可以通過ODBC來進行訪問。要想順利訪問SQL Server。 首先要保證以下幾點&#xff1a;1. QT編譯時已經編譯了QtSql2. 編譯了ODBC插件。可以通過 configure -plugin-sql-odbc來保證&#xff0c;也可以單獨編譯~/src/plu…