CodeVS1725 探險 二分答案 貪心

2021-08-03 12:03:17 字數 954 閱讀 3143

【題目描述】

有編號為1至n的n個同學一起去探險,現在把他們分成k個小組,每個小組完成一項探險任務。分組時,如果第i人與第j人分在同一組(i < j),則他們之間的所有人(第i+1,i+2,…,j-1個)也必須在同乙個小組中。

乙個小組內所有人的體力和越小,途中可能越危險。為了確保每個同學的安全,要求分組時,使得所有小組中,體力和最小的那個小組的所有人的體力和盡量大。

依次告訴你每個人的體力,如何分組呢?

【題解】

首先這個題codevs沒有給資料範圍,我查了一下,才知道是1≤n≤30000,1≤k≤1000, k≤n,每個人的體力值不大於10000。

這個題的意思是,要你在所有可能的分法中找出一種情況,使得最弱的那個組的體力和最大。很顯然,我們是希望我們求的答案在這一組最小的情況下最大,如果我們列舉答案的話,這個答案應該是從大到小的,而列舉的思路就讓我們想到了用二分答案。

想到了二分就要想怎麼寫check。很顯然,我們想讓其他的分組在每個組都大於列舉的那個答案的情況下還要滿足分成k組的情況。這個是比較好寫的。

#include

#include

#include

using

namespace

std;

const

int n=30000;

int w[n+5];

int n,k;

bool check(int x)

}if(sum>=x)num++;//可能會在加上w[n]的時候少算一組

if(num>=k)return

true;

else

return

false;

}int main()

printf("%d",lf);

return

0;}

codevs 1725 探險 (二分)

二分答案 這個題目要求 體力和最小的那個小組的所有人的體力和盡量大 很明顯我們二分最小體力 如果合法 逐漸放大 但是這裡我們二分的是最小而不是最大 所以累加的體力 ans時 跳過當前體力i 可以認為把他歸給了上一組 累加和 0 繼續分組 include include include define ...

二分 CodeVS3162 抄書問題

description 題目描述 現在要把m mm本有順序的書分給k kk個人複製 抄寫 每乙個人的抄寫速度都一樣,一本書不允許給兩個 或以上 的人抄寫,分給每乙個人的書,必須是連續的,比如不能把第 一 第三 第四本書給同乙個人抄寫。現在請你設計一種方案,使得複製時間最短。複製時間為抄寫頁數最多的人...

CODEVS 4768 跳石頭 二分

跳石頭更新嘍 2017.10.13 題目描述 description 一年一度的 跳石頭 比賽又要開始了!這項比賽將在一條筆直的河道中進行,河道中分布著一些巨大岩石。組委會已經選擇好了兩塊岩石作為比賽起點和終點。在起點和終點之間,有n塊岩石 不含起點和終點的岩石 在比賽過程中,選手們將從起點出發,每...