USACO 3.4 Raucous Rockers“破锣摇滚”乐队(DP/穷举)

这题的正解貌似是DP,但我看他数据小写了个暴力+剪枝就秒了,而且还超快(怪我咯)。写完后看了下DP其实也很简单,所以因为时间关系,就不去写了。

题目大意:现在要把n首歌收到m个光盘内,每个光盘最多放t分钟的歌,且每个光盘内的歌必须是连续的。求最多能放多少首歌。

方法:就是暴搜,然后加个跟当前最大值判断的剪枝(不加应该也行)就好了,毫无技术含量。不会的自己面壁去。

下面附程序:

var
  n,t,m,i,ans,f1:longint;
  a,f:array[0..20] of longint;

procedure dfs(x,y:longint);
var
  i:longint;
begin
  if y>ans then ans:=y;
  if x>n then exit;
  if n-x+1+y<=ans then exit;
  dfs(x+1,y);
  if (f1<m)and(a[x]<=t) then
  begin
    inc(f1);
    f[f1]:=a[x];
    dfs(x+1,y+1);
    dec(f1);
  end;
  if (f[f1]+a[x]<=t)and(f1>0) then
  begin
    f[f1]:=f[f1]+a[x];
    dfs(x+1,y+1);
    f[f1]:=f[f1]-a[x];
  end;
end;

begin
  readln(n,t,m);
  for i:=1 to n do
    read(a[i]);
  dfs(1,0);
  writeln(ans);
end.


你可能感兴趣的:(USACO 3.4 Raucous Rockers“破锣摇滚”乐队(DP/穷举))