今日はついにそれをUSACOのタイトルを磨くために始めることができます
我々は、すべての準備に問題を解決してきました
1010:1.3.2納屋修理修理牛舎
制限時間:1秒 メモリ制限:128メガバイト提出:9 解決:7
[ 提出 ]、[ 状態 ]、[ ディスカッションボード ] [命題男:外部のインポート]
タイトル説明
1.3.2納屋修理修理ブルペン
(Barn1.pas / C / CPP )
高暗い嵐の夜には、嵐の夜の下、農民ジョンのブルペンの屋根は、ドアが吹き飛ばされました。幸いなことに、多くの牛が休暇中なので、何の牛が住んでいません。牛は牛は一晩そこに住んで、他の隣に整列されます。牛牛のいくつかは、いくつかにはありません。牛舎はすべて同じ幅を有しています。ドアが欠落しているので、農夫ジョンはできるだけ早く新しいボードの前にブルペンを建てる必要があります。彼の新しい木材供給業者は彼に彼が望んでいる任意の長さを供給しますが、けちサプライヤーは唯一の木の限られた数を提供することができます。農夫ジョンは全体の長さを最小限にするために彼の木材を購入したいです。
与えられる。市販のボードの最大可能数M(1 <= M <= 50);総byre S(1 <= S <= 200);牛牛舎Cの合計数(1 <= C < = S);およびウシ番号stall_number(1 <= stall_number <= S)、木材の必要最小限の合計長さを計算牛納屋のすべてを停止牛舎。所望の回答として出力ボードの最小全長。
フォーマット
PROGRAMのNAME:barn1
INPUTのFORMAT:
(ファイルbarn1.in)
- 行1:ボードM、Sの総数と牛納屋C(スペースで区切られた)の総数の最大数
- 二行目のC + 1:各行は占有牛納屋の数を示す整数を含んでいます。
出力フォーマット:
(ファイルbarn1.out)
単一ラインは、木材の所望の最小合計長さを示す整数を含んでいます。
サンプル入力
4 50 18
3
4
6
8
14
15
16
17
21
25
26
27
30
31
40
41
42
43
サンプル出力
25
[バーの配置は、最適牛舎プレート3-8,14-21,25-31,40-43です。]
プロンプト
ソース/分類
これは難しい問題ではありません
ラベルは貪欲であると言います
所望の回答として出力ボードの最小全長。
実際には、限り質問には簡単な答えを見たいものをシミュレートするよう!
効果の対象にはとてもきちんとしています
木材のM個があること
ブルペンSがあります(ここで、 "あなたを伝えるLL)
これらのテンプレートはブルペンに、少なくともどのくらいの木材を頼むの合計をブロックするために使用することができます
質問は、私の考えを変更することがあり
もし共通ボード4
次に等価領域4の分離を介し、これは3つの空隙に相当し
これ!!!正の理解。。
牛への最初の牛を持つ列挙3大きなギャップ前の最後のこれらの空隙の間の距離が最小の答えである引きます!?!
すごいです!コードを貼り付けて
#include<bits/stdc++.h> using namespace std; int a[205],dis[205]; bool cmp(int a,int b)//重载函数 { return a>b; } int main() { int m,s,c; cin>>m>>s>>c; for(int i=1;i<=c;i++) cin>>a[i]; sort(a+1,a+c+1);//别忘了先把位置从小到大排个序 for(int i=1;i<c;i++) dis[i]=a[i+1]-a[i]-1;//保存间隙大小 sort(dis+1,dis+c,cmp);//从大到小排个序 int lentot=a[c]-a[1]+1;//保存总长度 for(int i=1;i<m;i++)//前m-1个间隙 lentot-=dis[i];//减!! cout<<lentot; return 0; }