zjnu 1299 零件分組(LIS變形)

2021-07-08 13:39:23 字數 1358 閱讀 1526

零件分組(stick)-動態規劃-中高階

case time limit:1000ms

time limit:3000ms

memory limit:65536k

total submissions:62

accepted:21

description

某工廠生產一批棍狀零件,每個零件都有一定的長度(li)和重量(wi)。現在為了加工需要,要將它們分成若干組,使每一組的零件都能排成乙個長度和重量都不下降

input

第一行為乙個整數n(n<=1000),表示零件的個數。第二行有n對正整數,每對正整數表示這些零件的長度和重量,長度和重量均不超過10000。

output

僅一行,即最少分成的組數。

sample input

5

8 4 3 8 2 3 9 7 3 5

sample output

2

思路:剛開始看到這題的時候感覺和飛彈攔截那道題的第二問很像。

但是這道題和飛彈那道題的差距是,飛彈那道題的飛彈順序是固定的,所以我們分組的時候也只能從前到後進行分組。

但是這裡我們可以對他們的順序進行改變後再進行分組。

所以首先我先對零件的長度進行從小到大的排序,因為我們要求的是乙個lis,這是第乙個約束條件,然後我們就像飛彈的第二問那樣,進行分組。分組的時候要注意當有多種情況成立時,我們要選擇那個w較大的那個,因為我們盡可能的要讓w小的去匹配小的嘛。然後就能夠求出需要幾組了。

飛彈那道題:飛彈攔截問題 (舉一反三!!)

#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef __int64 ll;

typedef unsigned __int64 ull;

#define inf 99999999

#define maxn 1010

int sys[maxn];

struct nodea[maxn];

bool cmp(node a,node b)}}

if(lmin==-1) sys[++tail]=a[i].w;

else sys[tx]=a[i].w;

}printf("%d\n",tail);

return 0;}/*

51 1

1 22 1

2 23 1

*/

零件分組 題解

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

零件分組 題解

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

P2093 零件分組

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