回 帖 发 新 帖 刷新版面

主题:有关USACO1.3的第2个问题求助!

请问谁知道有关USACO1.3第二题牛棚修理怎么做啊?
附:
输入:牛棚个数(<=200,>0);几个牛棚有牛;板子数;(不限长度)
一下每行输入一个有牛的牛棚号数;
输出:用的最少长度(用完所有板子,板子盖多少个牛棚都行,但有牛的地方都必须盖住,求最小值)。
一牛场的牛棚一面墙都被吹掉了,现有M块木板,不限长度,现有牛的牛棚都必须盖住,板子书小于有牛的牛棚数,求最小值。

回复列表 (共18个回复)

沙发

用动态规划吧:g(i,k)=min{g(j,k-1)+i-j},j=1,...,i-1
g(i,k)表示盖1-i牛棚用k块板最小值。

板凳

不要误导……这个显然是贪心

3 楼

已经好久没做Usaco的题了,搞计算机竞赛的??
这是我的账号,已经做到4.1了,你可以参考一下它提供的算法
还有,搞竞赛最好去大榕树信息学竞赛论坛。
UserName: smallbo1
Password: xt4e6ts

4 楼

确实是贪心,我需要完整程序!

5 楼

能讲清楚动态规划吗?

6 楼

我需要PASCAL语言的算法,C语言的看不懂!

7 楼

1.3的题,好像贪心是能过。好早以前做的了,记不太清了,若真“误导”,那就抱歉罗……^o^

8 楼

{动态规划算法:}
fillchar(g,sizeof(g),0);
a:=有牛的编号最靠前的牛棚号;
b:=有牛的编号最靠后的牛棚号;
for i:=a to b do
  if 第i个牛棚有牛 then g[i,1]:=i-a+1
                   else g[i,1]:=g[i-1,1];  {初始化,只盖一块板}
for k:=2 to m(板个数) do
  for i:=a to b do
    if 第i个牛棚无牛 then g[i,k]:=g[i-1,k]
    else begin
      g[i,k]:=i-a+1;
      for j:=a to i-1 do
        if g[j,k-1]+(i-j) < g[i,k] then g[i,k]:=g[j,k-1]+(i-j);
    end;

g[b,m]为所求。

{思路就是这样吧,我没原题和测试数据,所以没编程试过。:P 高手们多多指教!谢~~}

9 楼

[em2][em1][em1][em10][em10][em10][em10][em10][em10][em10][size=4][color=800000]哇,好深奥[/color]

10 楼

有谁能提供完整程序呢~~~~~最好不是动态规划的~~~~~~谢了~~~~~~无限期待~~~~~~~~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册