題目:
攔截飛彈?
每個物品有兩個狀態;
所以需要綜合考慮;
開始的想法:將他們的和從小到大排序;
這樣是不對的;
我們可以將其中乙個價值排序,這樣,我們就有了貪心的方向;
將另乙個狀態做攔截飛彈就可以了;(顯然?)
因為我們可以保證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 對正整...