補丁題 貪心 分段

2021-09-26 11:11:16 字數 1708 閱讀 9711

描述

雞尾酒的輪胎被扎了很多洞,於是他需要打一些補丁來覆蓋這些洞。但是由於他的時間有限,他只能打m個補丁,但是每個補丁的長度任意。

注意:輪胎不是環

給出:可以打的補丁個數 m(1 \le m \le 50)m(1≤m≤50);輪胎的長度 s(1 \le s \le 200)s(1≤s≤200);漏洞的個數 c(1 \le c \le s)c(1≤c≤s);漏洞的位置 stall_number(1 \le stall_number \le s)stall_number(1≤stall_number≤s),他想知道補完所有漏洞所需要的最少補丁總長度是多少。

輸入1 行:mm , ss 和 cc(用空格分開)

2 到 c+1c+1 行:每行包含乙個整數,表示漏洞的位置。

輸出補完所有漏洞所需要的最少補丁總長度是多少。

4 50 1834

681415

1617

2125

2627

3031

4041

4243

#include using namespace std;

#define rep(i,a,n) for (int i=a;i<=n;i++)

#define pb push_back

#define mp make_pair

#define io ios::sync_with_stdio(false)

#define fi first

#define se second

typedef long long ll;

typedef pairpii;

const int maxn=2e5+5;

const int maxm=1e6+5;

const ll inf=0x3f3f3f3f3f3f3f3f;

const ll mod=1e9+7;

int m,s,c;

int pos[205],dis[205];

int main()

sort(pos+1,pos+c+1);

for(int i=1;i<=c-1;i++)

sort(dis+1,dis+c);

reverse(dis+1,dis+c);

int sum=0;

for(int i=1;i<=m-1;i++)

int ans=pos[c]-pos[1]+1-sum; //m=3 s=20 c=6 1 2 4| 9 12| 20

//dis 0 1| 4| 2 | 7

//刪去4,7 分3段 3+1 3+1 0+1

cout#define ll long long

#define mem(a,b) memset(a,b,sizeof(a))

#define fi first

#define se second

#define sc(a) scanf("%d",&a) #define scl(a) scanf("%lld",&a)

#define io std::ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)

#define lb(x) (x)&(-x) int a[1000005]; int b[100005];

int main()

if(m>=c)

ans+=m;

cout<}

貪心 數列分段

時間限制 1 sec 記憶體限制 128 mb 提交 7 解決 5 提交 狀態 討論版 命題人 add zmx 對於給定的乙個長度為n的正整數數列a i 現要將其分成連續的若干段,並且每段和不超過m 可以等於m 問最少能將其分成多少段使得滿足要求。輸入檔案的第1行包含兩個正整數n,m,表示了數列a ...

貪心 數列分段II

時間限制 1 sec 記憶體限制 128 mb 題目描述 對於給定的乙個長度為n的正整數數列ai,現要將其分成連續的若干段,並且每段和不超過m 可以等於m 問最少能將其分成多少段使得滿足要求。輸入第一行包含兩個正整數n,m,表示了數列ai的長度與每段和的最大值 第二行包含n個空格隔開的非負整數ai。...

演算法題 陣列分段

清潔工 假設有m個房間,清潔每個房間耗時用乙個陣列表示,10 20 30 40 50 60 70 80 90,安排n個清潔工,將連續的房間分成n份,每部分耗時求和,其最大值為此種分法的總耗時。求最快的耗時是多少。例如3個清潔工的話,10 20 30 40 50 60 70 80 90,此時是最快的,...