C 貪心問題之合併石堆

2021-09-27 08:34:56 字數 1201 閱讀 9959

貪心演算法:

貪心演算法(又稱貪婪演算法)是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。

貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,即某個狀態以前的過程不會影響以後的狀態,只與當前狀態有關。

問題描述:

現在有n堆石子,每堆石子的個數不同,現在將n堆石子合併成一堆石子。

規則是每次合併兩堆石子,合併過程中會計錄石子個數,請問,石子數最小和最大分別是多少?

石子數最小思緒

輸入石子堆數,每堆的石子數

將每堆的石子數從小到大排列起來(bubble1)

合併最小的兩堆石子,然後記錄合併後的個數並累加

若合併未完成,則執行步驟2;若完成則輸出記錄的數

石子數最大的思緒同理最小

**如下:

#define _crt_secure_no_warnings

#include

#include

void

bubble1

(int data,

int n)}}

}void

bubble2

(int data,

int n)}}

}int

main()

;int sum =0;

printf

("請輸入有多少堆石子:");

scanf

("%d"

,&n)

;printf

("請輸入每堆石子中的個數:");

for(i =

0; i < n; i++

)for

(i =

0; i < n -

1; i++

)printf

("石子數最小為 %d\n"

, sum)

;//輸出最大石子數(要將最小石子數的**注釋)

//for (i = 0; i < n - 1; i++)

//printf("石子數最大為 %d\n", sum);

system

("pause");

return0;

}

C 最優合併問題(貪心)

time limit 1000 ms memory limit 65536 kib submit statistic problem description 給定k 個排好序的序列s1 s2,sk 用2 路合併演算法將這k 個序列合併成乙個序列。假設所採用的2 路合併演算法合併2 個長度分別為m和n...

貪心 最優合併問題

最優合併問題 time limit 1000ms memory limit 65536kb submit statistic discuss problem description 給定k 個排好序的序列s1 s2,sk 用2 路合併演算法將這k 個序列合併成乙個序列。假設所採用的2 路合併演算法合...

c語言練習動態規劃 貪心之石子合併

石子合併 有n堆石子排成一排 n 100 現要將石子有次序地合併成一堆,規定每次只能選相鄰的兩堆合併成一堆,並將新的一堆的石子數,記為該次合併的得分,編一程式,給出堆數n及每堆石子數 200 1 選擇一種合併石子的方案,使得做n 1次合併,得分的總和最少 2 選擇一種合併石子的方案,使得做n 1次合...