USACO 1.3 Barn Repair (动态规划再写次)

描述

在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶、门被吹飞了。 好在许多牛正在度假,所以牛棚没有住满。 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜。 有些牛棚里有牛,有些没有。 所有的牛棚有相同的宽度。 自门遗失以后,farmer John必须尽快在牛棚之前竖立起新的木板。 他的新木材供应商将会供应他任何他想要的长度,但是吝啬的供应商只能提供有限数目的木板。 farmer John想将他购买的木板总长度减到最少。

给出:可能买到的木板最大的数目M(1<= M<=50);牛棚的总数S(1<= S<=200); 牛棚里牛的总数C(1 <= C <=S);和牛所在的牛棚的编号stall_number(1 <= stall_number <= S),计算拦住所有有牛的牛棚所需木板的最小总长度。 输出所需木板的最小总长度作为答案。

[编辑]格式

PROGRAM NAME: barn1

INPUT FORMAT:

(file barn1.in)

  • 第 1 行: 木板最大的数目M ,牛棚的总数S 和 牛的总数C(用空格分开)
  • 第 2 到 C+1行: 每行包含一个整数,表示牛所占的牛棚的编号。

OUTPUT FORMAT:

(file barn1.out)

单独的一行包含一个整数表示所需木板的最小总长度。

[编辑]SAMPLE
INPUT

4 50 18
3
4
6
8
14
15
16
17
21
25
26
27
30
31
40
41
42
43

[编辑]SAMPLE
OUTPUT

25
/*
  ID:twd30651
  PROG:barn1
  LANG:C++
*/
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
/** TODO VAR. */
int m, s, c;
//m个板,s个棚,c头牛
int num[205], dp[205][55], minn = (int)(2e9);

int main()
{
    /*
      a[]牛棚编号
      dp[i][j]修到第i头牛,用前j个木板所用的最短长度。
      dp[i][j]=min{dp[i-1][j-1]+1,dp[i-1][j]+a[i]-a[i-1]}
      dp[i-1][j-1]+1表示在第j个牛棚使用一个新木板(长度为1)进行覆盖,
      dp[i-1][j]+a[i]-a[i-1]表示延长第j块木板到第i头牛
    */
    freopen("barn1.in","r",stdin);
    freopen("barn1.out","w",stdout);
    scanf("%d%d%d", &m, &s, &c);
    for(int i = 0; i < c; i++) scanf("%d", num + i);
    sort(num, num + c);//默认升序
    memset(dp, 0x3f, sizeof(dp));//一个"无穷大"10亿
    dp[0][0] = 1;
    for(int i = 1; i < c; i++)//第i头牛
    {
        for(int j = 0;j < m; j++)//第j块板
        {
            dp[i][j] = dp[i - 1][j] + (num[i] - num[i - 1]);
            if(j > 0) dp[i][j] = MIN(dp[i][j], dp[i - 1][j - 1] + 1);
            if(c - 1 == i) minn = MIN(minn, dp[i][j]);//最后一头牛,不要管木板是否用完了,记录最短木板长度
        }
    }
    printf("%d\n",minn);
    return 0;
}
时间: 2024-11-05 19:10:22

USACO 1.3 Barn Repair (动态规划再写次)的相关文章

USACO 1.3 Barn Repair

Barn Repair It was a dark and stormy night that ripped the roof and gates off the stalls that hold Farmer John's cows. Happily, many of the cows were on vacation, so the barn was not completely full. The cows spend the night in stalls that are arrang

USACO 1.3 Barn Repair(贪心)

这道题同样也是贪心 要使木板总长度最少,就要使未盖木板的长度最大. 我们先用一块木板盖住牛棚,然后,每次从盖住的范围内选一个最大的空隙,以空隙为界将木板分成两块,重复直到分成m块或没有空隙. /* ID:twd30651 PROG:barn1 LANG:C++ */ #include<iostream> #include<fstream> #include<stdlib.h> //#define DEBUG using namespace std; int M; int

USACO Section1.3 Barn Repair 解题报告

barn1解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------------------------------------------------------------------------------------------[题目] 有一列牛棚,编号从1到S,相邻的牛棚紧挨着(间距为0),每个牛棚长度是一个单位. 其中有C头牛,分别在各自的牛棚中,不存在多个牛挤

Usaco 1.3.2 修理牛棚(Barn Repair)

  Barn Repair 题意:在一个夜黑风高,下着暴风雨的夜晚,农民约翰的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 剩下的牛一个紧挨着另一个被排成一行来过夜. 有些牛棚里有牛,有些没有. 所有的牛棚有相同的宽度. 自门遗失以后,农民约翰必须尽快在牛棚之前竖立起新的木板. 他的新木材供应商将会供应他任何他想要的长度,但是供应商只能提供有限数目的木板. 农民约翰想将他购买的木板总长度减到最少. 给出:可能买到的木板最大的数目M(1<= M<=50);牛棚的总数S(1&l

在require回调函数中执行tooltipvalidator.init不需要另外再写逻辑

尽管每个人学习开发的过程会不一样,然而无论如何,系统的学习方法对每个学习者来说都是至关重要的.对于初学者,应该经常向资深的游戏开发者学习,通过他们的直播和视频,学习游戏开发的技巧.你从这些专家们身上学到的东西越多,你就可以越快成为优秀的开发者. 通过proceed()方法可以调用目标对象的相应方法,从而实现对目标方法的完全控制! angular2 的依赖注入包含了太多的内容,其中的一个重点就是注入器,而注入器又非常难理解,今天我们不深入介绍注入器的内容,可以参考官方文档,我们今天来说注入器的层级

第二十二篇:再写Windows驱动,再玩Windbg---NET

2011年到现在,就没再怎么搞过Windows驱动了. 最近, 由于项目需要, 试着改一改一个显卡驱动(KMDOD), 从实践上证明, 我在理论上对一个驱动的架构的正确与否.(USB Display = KMDOD + AVStream). 其中, KMDOD是完成显示的部分功能, 完成其中的VidPN(Video present network), 将驱动中原来的POST物理设备转变为USB物理设备. 而AVStream之所以这样提出, 完成是由于USB Video class的启发, 要不然

为了免费拿到微软的年底发布会的门票,只有厚着脸皮再写些 Microsoft Dynamics CRM 2013文章分享了

奔跑中的2015, 为了免费拿到微软的每年年底发布会的门票和IT相关的证书,没有办法,本人大专学历太低,最近本人所以在的城市政府有人才奖厉计划,就因要求本科及以上学历,都跟本人无缘了,所以只有厚着脸皮再写些 Microsoft Dynamics CRM 2013文章分享了,争取能在微软得到证书,肯定自已了. 前几个月在家里找到2012年的一张微软北京技术大会的门票,想想今年应该写点什么技术文章,再免费参加一次会议吧,想想写什么方面的呢,微软的office,server,数据库等专家太多了,写不过

再写点看到的东西

刚刚看到了一篇文章,说python已经成为美国大学计算机编程入门语言的首选. 先来看图:(图引自他人的文章) python语言图标 调查中抽取了39所著名大学作为样本,统计了他们为新生准备的编程入门语言种类. 情况如下: 从统计中可以看出python已经成为美国大学计算机编程教育的首选语言. 我用过c++,java,c,python, 个人觉得这其中python的语法结构最简洁清晰,类库很丰富,能轻松完成其他其他语言很难完成的任务. python作为第一入门语言也是很正常的,在国外的计算机编程教

时隔半年再写购物车程序并改进

时隔了半年时间,重新把购物车程序拿出来再写一遍,感觉对于循环语句比之前熟悉多了,脑子里面开始有程序流程图,之前懵懵懂懂地跟着老师来写,现在基本可以自己写,自己判断问题出在哪里了. 这段程序没用pycharm来写,直接用NOTEPAD++,感觉还很不错,昨天调试了NOTEPAD++运行python的环境,简单轻度的程序都可以试着用这个写了.界面还是很漂亮的. 编程要求和编程日志思考: 1.写一段商城程购物车序的代码2.用列表把商城的商品清单存储下来(1)不能用字典,因为字典无法用序列号打印,用列表