1. 程式人生 > >NOJ1076機器狗組裝費用——詭異的執行時間

NOJ1076機器狗組裝費用——詭異的執行時間

機器狗組裝費用

Time Limit(Common/Java):1500MS/4500MS          Memory Limit:65536KByte
Total Submit:402            Accepted:141

Description

sed同學最近迷上了製造機器狗,購置了大量所需零件,零件可以組裝為一個元件,這些元件或零件又可以組裝為一個大的元件。在製造機器狗中,元件或零件只能兩兩進行組裝,組裝的順序任意。在機器狗中,每個零件都有一個組裝成本,每次組裝一個元件的費用為各個零件組裝成本之和。給定各個零件組裝成本(單位為元),你的任務是幫助sed計算他至少花費多少費用。

Input

第一行包括一個整數N,表示機器狗零件數(1≤N≤10000)

第二行為N個正整數,表示每個機器狗零件組裝成本(單位為元),整數之間用空格隔開。

Output

輸出僅一行,即機器狗組裝的最少費用。

注意:輸出部分的結尾要求包含一個多餘的空行。

Sample Input

10
1 2 3 4 5 6 7 8 9 0

Sample Output

136

Source

“IBM南郵杯”個人賽2009

分析:此題要分析一下。N個整數需要排序,每次最小的2個數相加。就像最小生成樹。注意:每次加的和都要加在總的費用裡面。

一開始用陣列做,重複使用sort函式,超時。

第一次用陣列超時!

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int a[10000] = {0}, n, ans = 0;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
	sort(a, a+n);
	int i = 0;
	while(i <= n-2)
	{
		ans += a[i]+a[i+1];
		a[i+1] += a[i];
		a[i] = 0;
                if(a[i+1] > a[i+2])
                   sort(a, a+n);
		i ++;
	}
	printf("%d\n",ans);
	return 0;
}

改用list,AC。list的迭代器iterator要小心越界。下面這一條不加上提交能AC,但是本地執行出錯。 = =
//if(A.size() == 0) break; // 不加AC,但是本地執行錯誤
執行時間還是很長,應該有更佳的做法!
#include<iostream>
#include<list>
using namespace std;

//機器狗組裝費用

list<int> A;
list<int>::iterator p1;
list<int>::iterator p2;

int main()
{
	int n, tmp, ans = 0;
	scanf("%d",&n);
	A.clear();
	for(int i=0;i<n;i++)
	{
		scanf("%d",&tmp);
		A.push_back(tmp);
	}
	A.sort();
	while(A.size() > 1)
	{
		p1 = p2 = A.begin();
		p2 ++;
		int t = *p1 + *p2;
		ans += t;
		A.pop_front();
		A.pop_front();
		//if(A.size() == 0) break; // 不加AC,但是本地執行錯誤
		p2 = A.end();
		p2 --;
		if(t >= *p2)
			A.push_back(t);
		else
		{
			//A.push_back(t); // 超時
			//A.sort();
			for(p1=A.begin();p1!=A.end();p1++)
			{
				if(t < *p1)
				{
					A.insert(p1, t);
					break;
				}
			}
		}
	}
	printf("%d\n",ans);

	return 0;
}


相關推薦

NOJ1076機器組裝費用——詭異執行時間

機器狗組裝費用 Time Limit(Common/Java):1500MS/4500MS          Memory Limit:65536KByte Total Submit:402    

NOJ1076 機器組裝費用 貪心

題目描述 sed同學最近迷上了製造機器狗,購置了大量所需零件,零件可以組裝為一個元件,這些元件或零件又可以組裝為一個大的元件。在製造機器狗中,元件或零件只能兩兩進行組裝,組裝的順序任意。在機器狗中,每個零件都有一個組裝成本,每次組裝一個元件的費用為各個零件組裝成本之和。給定

NOJ 機器組裝費用 (優先權佇列)

機器狗組裝費用 時間限制(普通/Java) : 1500 MS/ 4500 MS          執行記憶體限制 : 65536 KByte 總提交 : 490            測試通過

noj 1076 機器組裝費用(優先佇列)

機器狗組裝費用 時間限制(普通/Java) : 1500 MS/ 4500 MS          執行記憶體限制 : 65536 KByte 總提交 : 491            測試通過 :

南郵-1076-機器組裝費用

                                          機器狗組裝費用 時間限制(普通/Java):1500MS/4500MS          執行記憶體限制:65536

shell 腳本執行時間

shell 腳本執行時間計算腳本執行時間: #!/bin/bash UseTime () { startTime=`date +%Y%m%d-%H:%M` startTime_s=`date +%s` $Command #根據自己腳本路徑,測試腳本文件執行時間

crontab執行時間和系統時間不一致

google 服務器 shanghai share crontab執行時間和系統時間不一致

java quartz 計算近20次執行時間

urn 開始時間 表達 () list epo java n) ret /** * * @desc 計算表達式近20次時間 * @auth josnow * @date 2017年5月31日 下午12:16:25

MyBatis插件及示例----打印每條SQL語句及其執行時間

應該 log bject 兩個 ack ctrl+ 給定 打破 insert Plugins 摘一段來自MyBatis官方文檔的文字。 MyBatis允許你在某一點攔截已映射語句執行的調用。默認情況下,MyBatis允許使用插件來攔截方法調用 Execut

c# 計算執行時間

ble bsp nds 執行 c# 計算 分段 sed watch C#計算執行時間 System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); //開

spring與quartz整合實現分布式動態創建,刪除,改變執行時間定時任務(mysql數據庫)

ces value 我們 job clu xsd collect 註解 common 背景:因為在項目中用到了定時任務,當時想到了spring的quartz,寫完發現費了很大功夫,光是整合就花了一上午,其中最大的問題就是版本問題,項目中用的是spring3.2.8的版本,查

關於SetTimer間隔小於OmTimer執行時間的問題

所有 pic 調用 das http str box trace modal 如果SetTimer的時間間隔為t,其響應事件OnTimer代碼執行一遍的時間為T,且T>t。這樣,一次未執行完畢,下一次定時到,這時候程序會如何執行?可能的情況:1、丟棄還未執行的代碼,開

【轉】Visual Studio單元測試小應用-測執行時間

line Language cat parse esc net 技術分享 javascrip huang 【轉】Visual Studio單元測試小應用-測執行時間 Visual Studio的單元測試會記錄每一個測試的執行時間,如果有幾個Method要測效能,以前我會用

使用微秒來計算PHP腳本的執行時間

獲得 family 執行時間 精確 使用 代碼塊 函數 一個 代碼 有的時候,程序員需要獲得一段代碼的執行時間來查看這個代碼塊的執行效率是高還是低。普通的PHP函數只能精確到秒,PHP中提供了一個microtime()函數來精確到微秒 使用微秒來計算PHP腳本的執行時間

crontab 執行時間與系統時間不一致

工作原因:修改系統時間後,未重啟rsyslogservice crond restartservice rsyslog restart本文出自 “不拋棄!不放棄” 博客,請務必保留此出處http://thedream.blog.51cto.com/6427769/1969697crontab 執行時間與系統時

EntityFramework的多種記錄日誌方式,記錄錯誤並分析執行時間過長原因(系列4)

tab parameter height 優化 系統 環境 build ado.net 所有 Entity Framework 延伸系列目錄 今天我們來聊聊EF的日誌記錄. 一個好的數據庫操作記錄不僅僅可以幫你記錄用戶的操作, 更應該可以幫助你獲得效率低下的語句來幫你提高

mysql 如何查看sql語句執行時間和效率

訪問 執行時間 subquery ber 如果 pan from xtra 重要 查看執行時間 1 show profiles; 2 show variables;查看profiling 是否是on狀態; 3 如果是off,則 set profiling = 1; 4 執

回到上次目錄、歷史命令查找快捷方式及執行時間顯示設置、查看系統版本

如何 cnblogs 尋找 long 9.png etc 執行時間 mage 內核 一、回到上次操作的目錄 # cd -進入上次訪問目錄 二、歷史命令搜索操作快捷鍵: [Ctrl + r], [Ctrl + p], [Ctrl + n]在終端中按捉 [Ctrl] 鍵的同時

計算方法執行時間

system action on() blog class 幫助 cos clas nbsp /// <summary> /// 方法幫助類 /// </summary> public class ActionHelper

Action執行時間過濾器

cti time attribute none tpc .info info 一個 單個 public class AccessStatisticsAttribute : ActionFilterAttribute { /// <summar