貪心演算法的理解:
這種題目不會有很明顯的正確性證明,因為可能從題目的意思好像不能完全符合,但其中的奧妙需要自己去理解,沒有固定的套路
這個問題主要是需要進行貪心,刪除左邊很大的數,看到很多人都是貪心將前面大的數給刪掉讓出來給小的數,首先可以保證前面的值一定是很大的值就行.但是字尾處理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...