洛谷貪心演算法訓練(python實現)

2021-10-20 05:47:19 字數 2934 閱讀 5330

貪心演算法的理解:

這種題目不會有很明顯的正確性證明,因為可能從題目的意思好像不能完全符合,但其中的奧妙需要自己去理解,沒有固定的套路

這個問題主要是需要進行貪心,刪除左邊很大的數,看到很多人都是貪心將前面大的數給刪掉讓出來給小的數,首先可以保證前面的值一定是很大的值就行.但是字尾處理0也是乙個問題,要將0

這裡學習到了如何在python中移動陣列:(以下為刪除第i個字元的example)

x =x[0:i]+ x[i+1:]        #
處理前導0:

while

(flag<

len(zifu)

and zifu[flag]

=='0'):

flag+=

1#使用flag

if(flag==

len(zifu)):

print

("0"

)else

:print

(zifu[flag:

])

完整**

zifu =input()

k = int(input()) #輸出k值

while k>0: #進行k次遍歷,貪心

for i in range(len(zifu)-1): #使用了n個

if(zifu[i]>zifu[i+1]):

zifu =zifu[0:i]+ zifu[i+1:] #

break

k -= 1

flag=0

while(flag

​ 對01的異或來說,就是求差,由於要找到

當a第i位為0,b第i位為0時,第i位在加/異或下的答案:0+0=0 0^0=0

當a第i位為0,b第i位為1時,第i位在加/異或下的答案:0+1=1 0^1=1

當a第i位為1,b第i位為0時,第i位在加/異或下的答案:1+0=1 1^0=1

當a第i位為1,b第i位為1時,第i位在加/異或下的答案:1+1=2 1^1=0

總的來說就是將所有數都異或起來的值必定小於相加.

這道題就是要找到砍掉惡龍頭最近的騎士,可以都從小到大排序,從小到大開始砍,如果最後沒有把所有龍頭都砍完就算輸,python中排序可以對指定範圍內(第1個到第10個數)進行排序:

a =[0

,-1,

2,5,

62,3]

a[1:]

=sorted

(a[1:]

)#就是只對1到後面的進行排序那是可以的

print

(a)# [0, -1, 2, 3, 5, 62]

這樣就實現了部分排序的功能,下面是使用正常貪心的做法:

n,m =

map(

int,

input()

.split())

cost =[0

for i in

range

(n)]

value =[0

for i in

range

(m)]

for i in

range

(n):

cost[i]

=int

(input()

)for i in

range

(m):

value[i]

=int

(input()

)cost.sort(

)value.sort(

)flag=

0flag1 =

0sumvalue=

0while

(flag:while

(flag1<=

(m-1

)and value[flag1]

#需要首先判斷是否陣列溢位了

flag1+=1if

(flag1>=m)

: sumvalue=

0break

sumvalue+=value[flag1]

flag1+=

1 flag+=1if

(flag1>=m)

:break

if(flag!=n)

:print

("you died!"

)else

:print

(sumvalue)

其他思路:

這道題可以使用優先佇列,構建兩個佇列,根據兩個佇列是否為空的情況進行輸出

這道題就是貪心問題,我們不斷的把前面的牌全部分給後面,而不能從後面的牌堆分給前面,因為題目說了牌總數滿足要求,於是最後總會有解(必是最優解),之後從第0堆依次移動至第n個堆,這樣可以保證是最小的,而且不用管前面的值.

n =

int(

input()

)a =[0

for i in

range

(n+1)]

a[0:n]=

list

(map

(int

,input()

.split())

)

sumvalue =

sum(a)

/n

for i in

range

(n):

a[i]

=int

(a[i]

-sumvalue)

ans=

0for i in

range

(n):

if(a[i]!=0

):# a[i+1]

+=a[i]

ans+=

1print

(ans)

貪心演算法近期訓練

距離上一次寫blog已經三天了,這三天我才做了三道題,不開心。總是達不到自己的要求。最近總是犯一些低階錯誤,超時已經成為了家常便飯,原來比wa更折磨人的是超時,怎麼改都過不了,這時候發現原來wa也是一件很美好的事情,就算會話一段時間,但是能找出來自己的錯誤,一般可能是考慮不全面或者是小細節的問題,但...

python實現貪心演算法

在對問題求解時,總是作出在當前看來是最好的選擇。也就是說,不從整體上加以考慮,它所作出的僅僅是在某種意義上的區域性最優解 是否是全域性最優,需要證明 問題 有一天海盜們截獲了一艘裝滿各種各樣古董的貨船,每一件都價值連城,一旦打碎就是去了價值,海盜船載重量為c,每件固定的重量為wi,海盜們該如何盡可能...

洛谷P1803 凌亂的yyy 貪心演算法

個人的想法比較直白,只需要先將每一場比賽以結束時間排一次序,得到乙個順序的結構體陣列,儲存最前面一節課的下課時間,然後以結束時間為準,在這相同結束時間比賽中下,如果有比賽的開始時間小於等於記錄的結束時間,直接參加比賽,然後計數,最後輸出總次數就可以了。下面ac include.h 萬能庫 struc...