国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

區間覆蓋問題

2019-11-11 04:41:18
字體:
來源:轉載
供稿:網友

PRoblem Description

 用i來表示x坐標軸上坐標為[i-1,i]的長度為1的區間,并給出n(1≤n≤200)個不同的整數,表示n個這樣的區間。現在要求畫m條線段覆蓋住所有的區間,條件是:每條線段可以任意長,但是要求所畫線段的長度之和最小,并且線段的數目不超過m(1≤m≤50)。 

Input

 輸入包括多組數據,每組數據的第一行表示點n,和所需線段數m,后面的n行表示點的坐標

Output

 輸出每組輸出占一行表示線段的長度。

Example Input

5 31 3 8 5 11

Example Output

7

Hint

 

Author

用一條線段的長度減去間隔最大的m-1組間隔, 得到的就是最短長度
01#include<stdio.h>
02struct dog
03{
04    int c;
05    int b;
06} a[201], t;
07int main()
08{
09    int n, m, i, l, l2, s, j;
10    while(scanf("%d%d", &n, &m) != EOF)
11    {
12        l = 0;
13        for(i = 0; i < n; i++)
14        {
15            scanf("%d", &a[i].c);
16        }
17        for(i = 0; i < n - 1; i++)
18        {
19            for(j = i + 1; j < n; j++)
20            {
21                if(a[i].c > a[j].c)
22                {
23                    t = a[i];
24                    a[i] = a[j];
25                    a[j] = t;
26                }
27            }
28        }
29        for(j = 0,i = 1; i < n; i++, j++)
30        {
31            a[j].b = a[i].c - 1 - a[i-1].c;
32        }
33        for(i = 0; i < n - 1; i++)
34        {
35            for(j = i + 1; j < n; j++)
36            {
37                if(a[i].b < a[j].b)
38                {
39                    s = a[i].b;
40                    a[i].b = a[j].b;
41                    a[j].b = s;
42                }
43            }
44        }
45        for(i = 0; i < m - 1; i++)
46        {
47            l += a[i].b;
48        }
49        l2 = a[n-1].c - a[0].c + 1 - l;
50        printf("%d/n", l2);
51    }
52    return 0;
53}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永川市| 易门县| 突泉县| 平乡县| 安阳市| 玛曲县| 大丰市| 桐城市| 东城区| 丰顺县| 牙克石市| 彭水| 绥化市| 郸城县| 保山市| 忻城县| 松潘县| 钦州市| 潼南县| 玉山县| 沈丘县| 河北省| 江油市| 常熟市| 侯马市| 错那县| 鹤壁市| 巩义市| 伊宁县| 峨山| 赣榆县| 西丰县| 唐河县| 固镇县| 太和县| 翼城县| 秦皇岛市| 若羌县| 南丰县| 开远市| 锡林郭勒盟|