描述
雞尾酒的輪胎被扎了很多洞,於是他需要打一些補丁來覆蓋這些洞。但是由於他的時間有限,他只能打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,此時是最快的,...