1. 程式人生 > >CSU1588 合併果子(貪心)

CSU1588 合併果子(貪心)

題目:現在有n堆果子,第i堆有ai個果子。現在要把這些果子合併成一堆,每次合併的代價是兩堆果子的總果子數。求合併所有果子的最小代價。
思路:每次優先合併最小的兩堆,但若每次合併後都進行排序,會造成TE,本文采取氣泡排序,每次只排出最小的兩個。
程式碼如下:
#include<cstdio>
#include<algorithm>
using namespace std;

int T,n,a[1100],s;

int main()
{
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		for(int i=0;i<n;i++)    scanf("%d",&a[i]);
		s=0;
		while(n>1)
		{
			int m = 2;//氣泡排序,每次只排最小的兩個 
			while (m--)
			{           
				for (int j = 0; j<n; j++)
				{
					if (a[j]<a[j + 1])
					{
						int k = a[j];
						a[j] = a[j + 1];
						a[j + 1] = k;
					}
				}
			}
			a[n - 2] = a[n - 1] + a[n - 2];
			s = s + a[n - 2];
			n--;
		}
		printf("%d\n",s); 
	}
	return 0;
} 

相關推薦

CSU1588 合併果子貪心

題目:現在有n堆果子,第i堆有ai個果子。現在要把這些果子合併成一堆,每次合併的代價是兩堆果子的總果子數。求合併所有果子的最小代價。 思路:每次優先合併最小的兩堆,但若每次合併後都進行排序,會造成TE

合併果子貪心+優先佇列

現在有n堆果子,第i堆有ai個果子。現在要把這些果子合併成一堆,每次合併的代價是兩堆果子的總果子數。求合併所有果子的最小代價。 Input 第一行包含一個整數T(T<=50),表示資料組數。 每組資料第一行包含一個整數n(2<=n<=1000),表示果子的堆數。 第二行包含n個正整數ai(

NOIP2004合併果子提高組T2————優先佇列STL,貪心

題解:本題主要考查優先佇列STL,貪心。若要體力最小,就要將最小的果合併,合併後的果子再入隊。 程式碼如下: #include<iostream> #include<queue> using namespace std; priority_queue<in

貪心】CODE[VS] 1063 NOIP2004普及組-合併果子 刷題記錄模擬+優先佇列

日常水題 貪心策略:每次找代價最小的兩對合並,用小根堆來維護,每次合併之後將當前合併結果重新推入佇列,直到合併完成(n-1次) 程式碼如下 #include <cstdio>

合併果子佇列和優先佇列

有兩種方法 一種是佇列 一種是優先佇列(priority_queue) 這兩種方法的區別是佇列定義時沒有自動排序 所以只能在輸入的時候按順序才能輸出正解(所以佇列的方法不被認為是正解) 下面是程式碼 比較簡便: #include<bits/stdc++.h> using na

合併果子小根堆 手打

題目描述 在一個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。 每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過 n-1n−1 次合併之後, 就只剩

合併果子STL堆排序

合併果子 來源: 2004年NOIP全國聯賽普及組 題目描述: 在一個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。 每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。

NOIP提高組2004 合併果子優先佇列排序

從oj上看到一道問題,合併果子,題意如下: 1171.合併果子 Time Limit: 1000 MS Memory Limit: 32768 KB Total Submission(s): 77 Accepted Submission(s):

CSU-1588 合併果子堆/單調佇列

題意 有 nn 堆果子,第 ii 堆果子有 aiai 個,每次合併的代價是兩堆果子個數的總和,求總合並的最小代價。 1≤n≤10001≤n≤1000 思路 堆(優先佇列)的做法已經眾所周知,複雜

BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡貪心

castle con name 個數 blank 調整 can 貪心 pro 【題目鏈接】 http://www.lydsy.com/JudgeOnline/problem.php?id=3399 【題目大意】    將一個集合調整成另一個集合中的數,把一個

HDU 1051: Wooden Sticks貪心

memory others sticks mac resp setup cto ret cst Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768

HDU 4415 Assassin&#39;s Creed貪心

all ria put space clas name 它的 tor problem pid=4415">HDU 4415 題意: 壯哉我Assassin! E叔有一柄耐久度為m的袖劍,以及n個目標士兵要去解決。 每解決掉一個士兵,消耗袖劍Ai的

hdu 4882 ZCC Loves Codefires貪心

string.h struct hdu cmp using return 貪心 ace algo # include<stdio.h> # include <algorithm> # include <string.h> usin

[LeetCode]Wildcard Matching 通配符匹配貪心

復雜度 能夠 sts als [0 popu tco ret lee 一開始採用遞歸寫。TLE。 class Solution { public: bool flag; int n,m; void dfs(int id0,const char *s,in

POJ 3069 Saruman's Army 貪心

依次 至少 一個 ide mage != cnblogs style man 題目大意:直線上有N個點,點i的位置是Xi,從這N個點中選取若幹,給他們加上標記,對每一個點,其距離為R以內的區域內必須有被標記的點。求至少需要多少個點被標記。 題目思路:設最左邊的點:點p的

POJ 3253 Fence Repair 貪心

復雜度 image ace 長度 復雜 節點 clas math 個數 題意:將一塊木板切成N塊,長度分別為:a1,a2,……an,每次切割木板的開銷為當前木板的長度。求出按照要求將木板切割完畢後的最小開銷。 思路:比較奇特的貪心 每次切割都會將當前木板一分為二,可以按

建築維修貪心

ros bsp tor clas urn 接下來 gin 一個數 表示 入侵者。但是T部落的基地裏已經有N個建築設施受到了嚴重的損傷,如果不盡快修復的話,這些建築設施將會完全毀壞。現在的情況是:T部落基地裏只有一個修理工人,雖然他能瞬間到達任何一個建築,但是修復每個建築都需

POJ 2376 Cleaning Shifts貪心

des always == col contain print eight ide weight Description Farmer John is assigning some of his N (1 <= N <= 25,000) cows

UvaLive 4863 Balloons貪心

這樣的 給定 ons urn 們的 bool div clu truct 題意: 給定n個隊伍, 然後A房間有a個氣球, B房間有b個氣球, 然後給出每個隊伍所需要的氣球數量和到A B房間的距離, 求把氣球全部送到每個隊伍的最短距離. 分析: 在氣球充足的情況下, 那麽我們

51Nod 1344 走格子 貪心

ret 機器人 const ani 能夠 貪心 nod 多少 整數 有編號1-n的n個格子,機器人從1號格子順序向後走,一直走到n號格子,並需要從n號格子走出去。機器人有一個初始能量,每個格子對應一個整數A[i],表示這個格子的能量值。如果A[i] > 0,機器人走