貪心演算法一般思路:從頂向下,大問題分解為小問題,小問題求最優解(一般都要排序)
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揹包問題,所不同的是每種物品有無限...