sdut 2074 区间覆盖问题(贪心)
生活随笔
收集整理的這篇文章主要介紹了
sdut 2074 区间覆盖问题(贪心)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
區間覆蓋問題
Time Limit: 1000MS Memory limit: 65536K
題目描述
用i來表示x坐標軸上坐標為[i-1,i]的長度為1的區間,并給出n(1≤M≤200)個不同的整數,表示n個這樣的區間。現在要求畫m條線段覆蓋住所有的區間,條件是:每條線段可以任意長,但是要求所畫線段的長度之和最小,并且線段的數目不超過N(1≤N≤50)。輸入
輸入包括多組數據,每組數據的第一行表示點n,和所需線段數m,后面的n行表示點的坐標輸出
輸出每組輸出占一行表示線段的長度。示例輸入
5 3 1 3 5 8 11示例輸出
7解題報告:
? ? 先把區間轉化成點的問題。本題是區間問題的一種解法和思路(做減法),畫圖模擬后貪心找出不需要的那些個間隔,并將其減去,最后得到的就是答案。
樣例分析:
? ? 1-5 ,8 ,11 三條線段即為所求。
ac代碼:
#include<iostream> #include<algorithm> #include<cstdio> using namespace std;int cmp(int a,int b){return a>b; } int main(){int n,m,i,sum;int a[220],aa[220];while(cin>>n>>m){for(i = 0; i<n; i++) {cin>>a[i];}sort(a,a+n);sum=a[n-1]-a[0]+1;//cout<<sum<<endl;for(i=0;i<n-1;i++)aa[i]=a[i+1]-a[i]-1;int nn=n-1;sort(aa,aa+nn,cmp);for(i=0;i<m-1;i++)sum-=aa[i];cout<<sum<<endl;}return 0; }題目鏈接:
http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/2074.html
總結
以上是生活随笔為你收集整理的sdut 2074 区间覆盖问题(贪心)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度飞桨顶会论文复现(5):视频分类论文
- 下一篇: LeetCode刷题实战(13):Rom