玲瓏OJ 1097 萌萌噠的第二題 LIS

2021-07-27 20:51:45 字數 1997 閱讀 1234

1097 - 萌萌噠的第二題

time limit:5s memory limit:128mbyte

submissions:610solved:155

description

一條東西走向的河兩邊有都排著工廠,北邊有n間工廠a提供原材料,南邊有n間工廠b進行生產。現在需要在工廠a和工廠b之間建運輸橋以減少運輸成本。可是每個工廠b只能接受最多6個工廠a提供的材料能滿足生產,而且建立的運輸橋之間不能有交叉,北邊的工廠a由西向東編號1~n,南邊的工廠b也是一樣,不能交叉的意思是如果a號工廠a跟b號工廠b之間建立了運輸橋,那麼不能存在c、d(c < a 且d > b) 使得c號工廠a和d號工廠b之間建立運輸橋,每個工廠a只能給乙個工廠b提供材料,每個工廠b只能由一間工廠a提供材料,請問在滿足上述條件的情況下最多能建立多少個運輸橋。

(每個工廠最多有6個選擇,但只能選乙個)

input

包含多組測試資料(<=15),其中每組測試資料:

第一行乙個整數n(1

<= n <= 10^5)

接下來n行,第i+1行6個整數表示i號工廠b能接受的6個工廠a的編號,保證所有編號的範圍是1~n,可能重複(請看樣例)。

output

每組資料輸出一行乙個整數表示最多能建立的運輸橋數量。

sample input31

2312

3222

2221

3131

3612

3456

1234

5612

3456

1234

5612

3456

1111

11sample output35

solution

「玲瓏杯」acm比賽 round #11

很容易就想到dp o(n^2) 複雜度太高

萬萬沒想到 這居然是lis

因為每個b只能選6個a

將每個b的6個選擇按從大到小排序 然後求最長單增子序列即可

例如樣例一

【1 2 3 1 2 3】,【2 2 2 2 2 2】,【1 3 1 3 1 3】——>332211 222222 333111

lis=123

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

//#include

using

namespace

std;

#define ll long long

#define ull unsigned long long

#define pii pair

#define inf 1000000007

#define pll pair

#define pid pair

const

int inf=1e9+7;

const

int n = 1e5+5;

int a[6*n];

int len=0;

int lis[6*n];

int lis(int*a,int len)

else

}return size;

}int main()

sort(t,t+6,greater());

for(int j=0;j<6;++j)

a[len++]=t[j];}}

printf("%d\n",lis(a,len));

}return

0;}

玲瓏OJ 1100 萌萌噠的第五題 dp

1100 萌萌噠的第五題 time limit 10s memory limit 128mbyte submissions 322solved 67 description 給出乙個長度為m的字串,請問有多少個長度為n的字串不存在子串等於給出的字串。為了簡化問題,我們規定所有字串只包含小寫英文本母。...

玲瓏杯 1099萌萌噠的第四題

給乙個數x,定義乙個函式f x 的結果是x的各位數字的平方和,若經過無數次遞迴操作之後若結果為1,也就是f f f f x 1,那麼這個數被認為是乙個特別的數。給出乙個數x請問這個數是否特別。input 包含多組測試資料 20 每組資料一行乙個整數x 1 x 1000000000 output 每組...

玲瓏杯 1101 萌萌噠的第六題(亂搞)

1101 萌萌噠的第六題 time limit 2s memory limit 128mbyte submissions 306solved 104 description 乙個凸多邊形的每個角都是rgb三種顏色的其中一種,保證相鄰的兩個點顏色都不一樣,請問是否能用多條不相交的對角線把多邊形切成多個...