洛谷 2093 零件分組 貪心

2021-08-09 21:40:02 字數 805 閱讀 4873

題目:

攔截飛彈?

每個物品有兩個狀態;

所以需要綜合考慮;

開始的想法:將他們的和從小到大排序;

這樣是不對的;

我們可以將其中乙個價值排序,這樣,我們就有了貪心的方向;

將另乙個狀態做攔截飛彈就可以了;(顯然?)

因為我們可以保證a陣列是單調遞減的;

能更新大的就更新大的,將小的留給後面更」需要」的物品; 學會善良地貪

方法二:

求最長下降子串行,它的長度即為答案;

證明:

假設已經有下降子串行: a、b;

存在乙個c在在a,b後面;

if c > a , c可以在a組;

if c < a, c > b ,c可以在b組;

else c < b,c只能單獨一組;

證畢……

當然,這裡的a,b並不是固定不變的。

#include

#include

#include

#include

using

namespace

std;

const

int maxn=10001;

int n,tot;

struct hh

ma[maxn];

int a[maxn];

bool cmp(hh a,hh b)

}if(!flag) a[++tot]=ma[i].y;

}cout

}int main()

P2093 零件分組

某工廠生產一批棍狀零件,每個零件都有一定的長度 li 和重量 wi 現在為了加工需要,要將它們分成若干組,使每一組的零件都能排成乙個長度和重量都不下降 若i輸入格式 第一行為乙個整數n n 1000 表示零件的個數。第二行有n對正整數,每對正整數表示這些零件的長度和重量,長度和重量均不超過10000...

零件分組 題解

題目描述 某工廠生產一批棍狀零件,每個零件都有一定的長度 li 和重量 wi 現在為了加工 需要,要將它們分成若干組,使每一組的零件都能排成乙個長度和重量都不下降 若 ili lj,wi wj 的序列。請問至少要分成幾組?輸入 第一行為乙個整數 n n 1000 表示零件的個數,第二行有 n 對正整...

零件分組 題解

題目描述 某工廠生產一批棍狀零件,每個零件都有一定的長度 li 和重量 wi 現在為了加工 需要,要將它們分成若干組,使每一組的零件都能排成乙個長度和重量都不下降 若 ili lj,wi wj 的序列。請問至少要分成幾組?輸入 第一行為乙個整數 n n 1000 表示零件的個數,第二行有 n 對正整...