選擇困難症

2021-07-22 19:19:45 字數 1793 閱讀 2658

題目描述

又到吃飯時間,polo 面對飯堂裡琳(fei)琅(chang)滿(keng)目(die)的各種食品,又陷入了痛苦的抉擇中:該是吃手(jiao)打肉餅好呢,還是吃豆(cai)角(chong)肉片好呢?嗯……又不是天秤座怎麼會醬紫呢?

具體來說,一頓飯由m 個不同的部分組成(葷菜,素菜,湯,甜品,飲料等等),polo 要在每個部分中選一種作為今天的午飯。俗話說的好,永遠沒有免費的午餐,每種選擇都需要有一定的花費。長者常常教導我們,便宜沒好貨,最便宜的選擇估計比較坑爹,可囊中羞澀的polo 還要把錢省下來給某人買生日禮物,這該怎麼辦呢?

於是乙個折中方案出來了:第k 便宜的組合要花多少錢?這就要靠你了。

輸入 第一行兩個數m,k,含義如上所述。

接下來m 行,先是乙個整數ai,表示第i 個部分有多少種選擇。接下來用空格分開的ai 個整數表示每種選擇的**。

輸出 一行乙個整數表示答案。

樣例輸入

2 2

2 1 3

2 2 2

樣例輸出

3提示

【樣例解釋】

最便宜的選擇是第一部分選擇1 塊錢的,第二部分選擇2 塊的。但由於第二部分裡2 塊錢有兩種不同的選擇,所以第二便宜的總花費仍然是3 塊。

此題跟poj2442是一樣的,以前也做過,但考試的時候卻一直想不出做法。今天又整理了一下。

首先要一行一行來,設執行到i行。 s[

j]表示

1−(i

−1)行

第j小的

方案的花

費。然後對於每行,要初始化一些數,分別把第i小的和該行第1個加起來。

void prepare(int i)

}

然後一直取最小的,(必須直接取,因為指標往後面移動的話顯然更大)。然後那個最小的r指標+1,產生出乙個新的數。

len++;

t[len]=heap[1].v

; if(heap[1].r+1

<=a[i][0]) //r還能往後加1

這樣的好處就是,你只需要考慮r這個下標,並且不影響取m個最小值的正確性。

#include

#include

#include

#include

#define ll long long

using namespace std;

int n,m,x,tot,len;

int a[11][500001];

ll s[100005],t[100005];

struct ty

heap[100005];

void up(int

id) else

break;

}}void down(int

id) else

break;

}}void prepare(int i)

}int main()

x=a[1][0];

for(int i=1;i<=x;i++) s[i]=a[1][i];

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

swap(heap[1],heap[tot]);

tot--;

down(1);

x=max(x,len);

if(len==m||tot==0) break;

}for(int j=1;j<=x;j++) s[j]=t[j];

}cout

0;}

專業治療選擇困難症 幫你做選擇

很多時候都會遇到讓人糾結的事情,比如做什麼了不做什麼的了。都說拋硬幣很有效,並不是因為拋硬幣的結果,而是在硬幣丟擲的那一瞬間,心中到底想要什麼就已經很明顯了。但是咧,不可能隨身都帶著一枚硬幣吧。於是有了下面的這個小小的軟體。哈,這裡並不能說是核心演算法吧。畢竟不是自己的。就是乙個產生隨機數的演算法。...

求職準備 救救我的選擇困難症

待在哪座城市 人往高處走,水往低處流。理由很簡單,萬一過的不好,我們還有退路,可以從一線退去二線,從二線退去三線,享受 高階知識分子下鄉被大家捧在手心的感覺 但是如果你像我一樣不服輸,咱們就聊點有意思的。每個人一天都是24小時,假設咱們8小時的工作,牛人只用一半的時間就完成了。那麼每天牛人可以用省出...

用層次分析法解決手機選擇困難症

最近一舍友,想換一部手機,1000上下,向我諮詢應該選什麼手機?作為一名產品控,我推薦了小公尺 魅藍 堅果.然後他問我具體選擇哪款時,我從外觀 費用 效能 拍照 網路制式等幾個方面介紹了這幾款手機.舍友聽得一頭霧水,反而越來越糊塗。說了那麼多,對他的具體選擇並沒有什麼卵用.於是乎,就想著通過層次分析...