貪心演算法2

2021-10-04 06:58:25 字數 1587 閱讀 9882

太難的題沒有做出來,所以就寫兩道印象較為深刻的題。

1.最小新整數

給定乙個十進位制正整數n(0 < n < 1000000000),每個數字上數字均不為0。n的位數為m。

現在從m位中刪除k位(0#include

using

namespace std;

char a[

1000000000];

intmain()

if(f)

for(

int j=p;j

1;j++

) a[j]

=a[j+1]

; n--;}

}for

(int i=

0;i) cout<

; cout<

}return0;

}第一眼看這題的時候,我沒有太在意,因為和一本通上一樣,而當時借鑑了別人的題解,沒有想的太仔細,只是記住了當時的解法是:從左到右,去掉第乙個逆序數,然後就過了,仔細想一想,這個思路缺少了一大部分,沒有考慮沒有逆序數的情況,所以正確的思路應該是:先從左到右搜尋有無逆序數,如有,去掉第乙個而不是最大的(如128796,去掉8之後的數比去掉9的小),如果去掉的位數還沒有達到目標數,再從左向右搜尋(這時應該沒有逆序數),每次去掉其中最大的乙個。

2.拼點遊戲

c和s兩位同學一起玩拼點遊戲。有一堆白色卡牌和一堆藍色卡牌,每張卡牌上寫了乙個整數點數。c隨機抽取n張白色卡牌,s隨機抽取n張藍色卡牌,他們進行n回合拼點,每次兩人各出一張卡牌,點數大者獲得三顆巧克力,小者獲得一顆巧克力,如果點數相同,每人各得二顆巧克力,使用過的卡牌不得重複使用。已知c和s取到的卡牌點數,請程式設計計算s最多和最少能得到多少顆巧克力。

輸入包含多組測試資料。

每組測試資料的第一行是乙個整數n(1<=n<=1000),接下來一行是n個整數,表示c抽到的白色卡牌的點數,下一行也是n個整數,表示s抽到的藍色卡牌的點數。

輸入的最後以乙個0表示結束。

輸出對每組資料,輸出一行,內容是兩個整數用空格格開,分別表示s最多和最少可獲得的巧克力數。

int
tjsm

(int a,

int b)

// b win

else

else

//b[bright]==a[aright]

if(b[bleft]

>a[aleft]

)else

//b[bright]=a[aright]&&b[bleft]<=a[aleft]

else

//b[bleft]}}

}return s;

}典型的田忌賽馬問題,但我一開始少想了一部,沒有比較兩個陣列最小的數,被卡了好久,具體思路如下

3雖然有些題又做了一遍,但仍感覺貪心是目前所學中最難的,主要困難在於想到的策略不是最優的,總會漏掉某些細節,或者有時想到的策略過於繁瑣,易導致思路混亂,還是應該多做題來長點見識,沒過的題打算以後有時間再試試。

貪心演算法2

在求最優解問題的過程中,依據某種貪心標準,從問題的初始狀態出發,直接去求解每一步的最優解,通過若干次的貪心選擇,最終得出整個問題的最優解,這種求解方法就是談心演算法。從貪心演算法的定義可以看出,貪心法並不是從整體上考慮問題,它所做出的選擇只是在某中意義上的區域性最優解,而由問題自身的特性決定了該題運...

貪心演算法(2)

題目描述 通過懸崖的yifenfei,又面臨著幽谷的考驗 幽谷周圍瘴氣瀰漫,靜的可怕,隱約可見地上堆滿了骷髏。由於此處長年不見天日,導致空氣中布滿了毒素,一旦吸入體內,便會全身潰爛而死。幸好yifenfei早有防備,提前備好了解藥材料 各種濃度的萬能藥水 現在只需按照配置成不同比例的濃度。現已知yi...

貪心演算法2

多處最優服務次序問題。問題描述 設有n個顧客同時等待一項服務,顧客i需要的服務時間為ti,1 i n 共有s處可以提供此項服務。應如何安排n個顧客的服務次序才能使平均等待時間達到最小?輸入 第一行為兩個正整數n和s 第二行為n個正整數,表示n個顧客需要的服務時間 輸出 最小平均等待時間。includ...