t081 序列長度 貪心做法

2021-09-28 10:01:00 字數 1191 閱讀 3185

time limit: 1 second

memory limit: 128 mb

【問題描述】

有乙個整數序列,我們不知道她的長度是多少(即序列中整數的個數),但我們知道在某些區間中至少有多少個整數,用區間

[ai,bi,ci]來描述它,[ai,bi,ci]表示在該序列中處於[ai,bi]這個區間的整數至少有ci個。現在給出若干個這樣的區間,

請你求出滿足條件的最短序列長度是多少。如果不存在則輸出 -1。

【輸入格式】

第一行包括乙個整數n(n<=1000),表示區間個數;

以下n行每行描述這些區間,第i+1行三個整數ai,bi,ci,由空格隔開,其中0<=ai<=bi<=1000 而且 1<=ci<=bi-ai+1。

【輸出格式】

檔案輸出只有乙個整數表示滿足要求序列長度的最小值。

sample input

5 3 7 3

8 10 3

6 8 1

1 3 1

10 11 1

sample output

【題目鏈結】:

【題解】

先把n個ai,bi,ci按照ai第一關鍵字,bi第二關鍵字公升序排;

然後逆序處理n個關係;

優先選ai..bi這個區間裡面的前面部分(當然如果這個區間裡面有些數字已經被選了就不用再選了),這樣優先選前面的部分,就能讓前面的關係更容易利用公共的部分;就是這樣的貪心吧.

轉換成程式語言就是公升序列舉啦^_^

(想不出來什麼情況會無解..)

【完整**】

#include 

#include

using

namespace

std;

const

int maxn = 1000+100;

struct abc

};int n;

bool bo[maxn];

abc t[maxn];

int main()

if (t[i].c!=0)}}

int si = 0;

for (int i = 0;i <= 1000;i++)

if (bo[i])

si++;

printf("%d\n",si);

return

0;}

NOIP模擬 11 6 T2 序列操作

題目描述 一開始有 n 個非負整數 h i 1 i n 接下來會進行 m 次操作,第 i 次操作給出乙個數 c i 要求你選出 c i 個大於0的數並將它們減去1。問最多可以進行多少輪操作後無法操作 即沒有 c i 個大於0的數 輸入格式 第一行兩個數表示 n 和 m。第二行 n 個數描述 h i ...

校內測 10 28 T2 序列區間 暴力

傳送門 看到每個數最大只能是1e8 1e81e 8,最多有2e5 2e52e 5個數,而k kk最大是1e5 1e51e 5,所以我們的乘積最大也只能到2e18 2e18 2e18 所以除了1 11,我們最多隻會算log loglo g個數,所以考慮把相鄰的1 11縮成乙個數,其他的數暴力算 inc...

leetcode115,字串T中序列S的個數

原文 問題描述 給定乙個字串 s 和乙個字串 t,計算在 s 的子串行中 t 出現的個數。乙個字串的乙個子串行是指,通過刪除一些 也可以不刪除 字元且不干擾剩餘字元相對位置所組成的新字串。例如,ace 是 abcde 的乙個子串行,而 aec 不是 示例1 輸入 s rabbbit t rabbit...