程式設計題 京東 生日禮物

2021-07-31 16:24:54 字數 1790 閱讀 2848

題目描述

bf的生日快到了,這一次,小東決定為bf送乙份特別的生日禮物為其慶生。作為高智商中的佼佼者,bf在國外求學,因此小東無法與之一起慶生。小東計畫送乙個生日卡片,並通過特別的包裝讓bf永遠難忘。

她決定把卡片套裝在一系列的信封a = 中。小東已經從商店中購買了很多的信封,她希望能夠用手頭中盡可能多的信封包裝卡片。為防止卡片或信封被損壞,只有長寬較小的信封能夠裝入大些的信封,同尺寸的信封不能套裝,卡片和信封都不能摺疊。

輸入

輸入有若干組,每組的第一行包含三個整數n, w, h,1<=n<=5000, 1<=w, h<=10^6,分別表示小東手頭的信封數量和卡片的大小。緊隨其後的n行中,每行有兩個整數wi和hi,為第i個信封的大小,1<=wi, hi<=10^6。

輸出

對每組測試資料,結果第一行中輸出最多能夠使用的信封數量,結果第二行中按使用順序輸出信封的編號。由於小東有潔癖,她對排在前面的信封比較有好感,若有多個信封可用,她喜歡用最先拿到的信封。另外別忘了,小東要求把卡片裝入能夠裝的最小信封中。

如果卡片無法裝入任何信封中,則在單獨的行中輸出0。

思路

我看題時對題意有兩個疑惑,一是w和h的值可否交換,二是信封的大小判斷包不包括(w1==w2 && h1我整體的思路是使用動態規劃完成的,首先儲存了尺寸超過卡片的所有信封作為備選,選用map結構儲存,使所有信封依次按照w、h從小到大排序。依序遍歷每乙個備選信封,以當前信封a作為最後乙個信封,遍歷尺寸比它小的所有信封(因為前面所有的值都會影響當前的結果,所以都需要遍歷),計算出此時能夠套裝的信封總數的最大值,儲存最大值的情況下a的前乙個信封的索引號。

程式設計問題記錄

#include

#include

#include

using

namespace

std;

struct size

};int main()

mapint>select;

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

if (wi>w && hi>h)

;if (select.find(env) == select.end())

select.insert(pairint>(env, i));}}

int packnum = select.size();

if (packnum > 0)}}

if (cnt == 0)cnt = 1;

maxnum[it->second] = cnt;

previd[it->second] = pid;

if ((cnt>maxnum[maxid]) || (cnt == maxnum[maxid] && it->second < maxid)) maxid = it->second;

}select.clear();

int id = maxid;

int count = 0;

while (id >= 0)

cout

<< count << endl;

delete previd;

delete maxnum;

previd = null;

maxnum = null;

if (count > 0)

cout

<< endl;}}

else

}return

0;}

生日禮物(京東2016實習生真題)

include include include include include include include include include include include include include include include include using namespace std ty...

單調 生日禮物

luogup2564 題目 小西有一條很長的彩帶,彩帶上掛著各式各樣的彩珠。已知彩珠有n個,分為k種。簡單的說,可以將彩帶考慮為x軸,每乙個彩珠有乙個對應的座標 即位置 某些座標上可以沒有彩珠,但多個彩珠也可以出現在同乙個位置上。小布生日快到了,於是小西打算剪一段彩帶送給小布。為了讓禮物彩帶足夠漂亮...

生日禮物(單調佇列)

小西有一條很長的彩帶,彩帶上掛著各式各樣的彩珠。已知彩珠有n個,分為k種。簡單的說,可以將彩帶考慮為x軸,每乙個彩珠有乙個對應的座標 即位置 某些座標上可以沒有彩珠,但多個彩珠也可以出現在同乙個位置上。小布生日快到了,於是小西打算剪一段彩帶送給小布。為了讓禮物彩帶足夠漂亮,小西希望這一段彩帶中能包含...