貪心 完全揹包問題

2021-10-22 01:55:14 字數 2171 閱讀 8017

貪心演算法一般思路:從頂向下,大問題分解為小問題,小問題求最優解(一般都要排序)

1.排隊接水

題目描述

有 n 個人在乙個水龍頭前排隊接水,假如每個人接水的時間為 ti ,請程式設計找出這 n 個人排隊的一種順序,使得 n 個人的平均等待時間最小。

輸入格式

第一行為乙個整數 n。

第二行 n 個整數,第 i 個整數 ti 表示第 i 個人的等待時間 ti。

輸出格式

輸出檔案有兩行,第一行為一種平均時間最短的排隊順序;第二行為這種排列方案下的平均等待時間(輸出結果精確到小數點後兩位)。

輸入輸出樣例:

輸入

10 

56 12 1 99 1000 234 33 55 99 812

輸出

3 2 7 8 1 4 9 6 10 5

291.90

思路分析

要讓人等待時間盡可能少,就需要使排在最前面的人接水時間最短,後面的人等待時間才會短。

**:

#include

#include

#include

#include

#include

using namespace std;

int a[

1005]=

;int b[

1005]=

;int

main()

sort

(a,a+n)

;for

(i=0

; i1; i++)}

}for

(j=0

; jcout

x=0;

for(i=

0;i1;i++

) sum=sum/n;

printf

("%.2lf"

,sum)

;return0;

}

2.淘淘摘蘋果

題目描述

又是一年秋季時,陶陶家的蘋果樹結了 n 個果子。陶陶又跑去摘蘋果,這次他有乙個 a 公分的椅子。當他手夠不著時,他會站到椅子上再試試。

這次與 noip2005 普及組第一題不同的是:陶陶之前搬凳子,力氣只剩下 s 了。當然,每次摘蘋果時都要用一定的力氣。陶陶想知道在 s<0 之前最多能摘到多少個蘋果。

現在已知 n 個蘋果到達地上的高度 xi ,椅子的高度 a,陶陶手伸直的最大長度 b,陶陶所剩的力氣 s,陶陶摘乙個蘋果需要的力氣 yi​ ,求陶陶最多能摘到多少個蘋果。

輸入格式

第 1 行:兩個數 蘋果數 n,力氣 s。

第 2 行:兩個數 椅子的高度 a,陶陶手伸直的最大長度 b。

第 3 行~第 3+n-1 行:每行兩個數 蘋果高度 xi ,摘這個蘋果需要的力氣 yi 。

輸出格式

只有乙個整數,表示陶陶最多能摘到的蘋果數。

輸入輸出樣例

輸入

8 15

20 130

120 3

150 2

110 7

180 1

50 8

200 0

140 3

120 2

輸出

4
說明

n<=5000,a<=50,b<=200,s<=1000,x<=280,y<=100.

思路分析:

蘋果的高度首先要是能摘到的,想要摘到盡可能多的蘋果,就要先摘耗費體力少的蘋果。

**:

#include

#include

#include

#include

#include

using namespace std;

6000]=

;int

main()

int j=

0,cnt=0;

for(i=

1; i<=n; i++)}

sort

; i=0;

while

>=0)

if(s<0)

cnt--

; cout

}

(本篇作為學習筆記自用)

完全揹包 貪心 dp

考慮以下問題 有n nn種物品,第i ii種有z iz i zi 個,價值是y iy i yi 重量是w iw i wi 那麼把這些物品放入大小為x xx的揹包,的最大價值是多少 n,yi 50 wi,z i 10 9 n,y i leq 50 w i,z i leq 10 9 n,yi 50w i...

揹包問題(完全揹包)

1.矩陣鏈乘法 2.投資組合問題 3.完全揹包問題 4.01揹包問題 5.最長公共子串行 乙個揹包,可以放入n種物品,物品j的重量和價值分別為,如果揹包的最大重量限制是b,怎麼樣選擇放入揹包的物品以使得揹包的總價值最大?組合優化問題,設表示裝入揹包的第j個物品的數量,解可以表示為。那麼目標函式和約束...

完全揹包問題

這個是從ppt上弄過來的。完全揹包問題 有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。放入第i種物品的耗費的空間是ci,得到的價值是wi。求解 將哪些物品裝入揹包,可使這些物品的耗費的空間總和不超過揹包容量,且價值總和最大 基本思路 這個問題非常類似於01揹包問題,所不同的是每種物品有無限...