動態規劃問題筆記2 買糖果問題

2021-08-27 08:32:20 字數 1569 閱讀 6917

/*

題目描述:

某糖果公司專門生產兒童糖果,它最受兒童歡迎的糖果有a1、a2兩個序列,均採用盒式包裝。包裝好的a1類糖果體積為乙個儲存單位,而包裝好的a2類糖果體積正好是a1類的

兩倍。這兩類糖果之所以廣受兒童歡迎,是因為糖果中含有公司獨家研發的魔幻因子。a1或a2序列中的糖果,看起來包裝可能是一樣的,但因為其中的魔幻因子含量不同被細分

為不同的產品。臨近傳統節日,公司的糖果供不應求。作為乙個精明的糖果分銷商,小東希望能夠藉此大賺一筆,於是帶著現金開著貨車來公司提貨。貨車的容量是確定的,小東

希望採購的糖果能夠盡可能裝滿貨車,且糖果的魔幻因子總含量最高。只要不超出貨車容量,糖果總可以裝入貨車中。小東希望你能幫她解決這一問題。

輸入:輸入中有多組測試資料。每組測試資料的第一行有兩個整數n和v,1<=n<=10^5, 1<=v<=10^9,n為可供選購糖果數量,v為貨車的容量。隨後n行為糖果的具體資訊,第一行

編號為1,第二行編號為2,以此類推,最後一行編號為n。每行包含兩個整數ti和pi,1<=ti<=2, 1<=pi<=10^4,ti為糖果所屬的序列,1為a1、2為a2,pi則是其中的魔

幻因子含量。

輸出:對每組測試資料,先在單獨的一行中輸出能採購的糖果中的魔幻因子最高含量,之後在單獨的行中按編號從小到大的順序輸出以空格分隔的糖果編號,若有多組糖果組合均能滿足

要求,輸出編號最小的組。若沒有糖果能夠滿足要求,則在第一行中輸出0,第二行輸出「no」。

如:輸入

3 21 2

2 71 3

輸出 7

2*/#include

#include

#include

using

namespace

std;

int max(const

int& a, const

int& b)

void swap(int& a, int& b)

void mysort(vector

& v)

}}int main()

for (int i = 0; i1; i++)

for (int i = 0; i1; i++)

for (int i = 1; i <= n; i++)

else}}

vector

> res;

vector

candynum;

int temp = v;

for (int i = n; i>0; i--)

}/*vector::iterator it = candynum.begin();

sort(it, it + candynum.size());*/

mysort(candynum);

if (candynum.size() == 0)

cout

<< dp[n][v] << endl;

for (int i = 0; icout

<" ";

}cout

<< endl;

system("pause");

return

0;}

動態規劃問題的筆記

組合問題公式 dp i dp i num true false問題公式 dp i dp i or dp i num 最大最小問題公式 dp i min dp i dp i num 1 或者dp i max dp i dp i num 1 以上三組公式是解決對應問題的核心公式。當然拿到問題後,需要做到...

動態規劃 整數劃分問題(2)

整數劃分 乙個老生長談的問題 1 練練組合數學能力.2 練練遞迴思想 3 練練dp 總之是一道經典的不能再經典的題目 這道好題求 1.將n劃分成若干正整數之和的劃分數。2.將n劃分成k個正整數之和的劃分數。3.將n劃分成最大數不超過k的劃分數。4.將n劃分成若干奇正整數之和的劃分數。5.將n劃分成若...

動態規劃2 數塔問題

數塔問題是二維情況下動態規劃的經典問題,下面以洛谷的乙個例題來分析數塔問題以及動態規劃 原題鏈結 題目描述 觀察下面的數字金字塔。寫乙個程式來查詢從最高點到底部任意處結束的路徑,使路徑經過數字的和最大。每一步可以走到左下方的點也可以到達右下方的點。在上面的樣例中,從7 3 8 7 5 的路徑最大 輸...