[USACO 2.1.4] Healthy Holsteins

[题目描述]

Healthy Holsteins

健康的好斯坦奶牛

农民JOHN以拥有世界上最健康的奶牛为骄傲。他知道每种饲料中所包含的的牛所需的最低的维他命量是多少。请你帮助农夫喂养他的牛,以保持他们的健康,使喂给牛的饲料的种数最少。
给出牛所需的最低的维他命,输出喂给牛需要哪些种类的饲料,且所需的种类数最少。

PROGRAM NAME: holstein INPUT FORMAT

第1行:一个整数V(1=V=25),表示需要的维他命的种类数。
第2行:V个整数(1=每个数=1000),表示牛每天需要的维他命的最小量。
第3行:一个整数G(1=G=15),表示可用来喂牛的饲料的数量。下面G行,第i行表示编号为i饲料包含的各种维他命的量的多少。

SAMPLE INPUT (file holstein.in)
4
100 200 300 400
3
50 50 50 50
200 300 200 300
900 150 389 399

OUTPUT FORMAT
输出文件只有一行,包括:

  • 牛必需的最小的饲料种数P
  • 后面有P个数,表示所选择的饲料编号(按从小到大排列)。

SAMPLE OUTPUT (file holstein.out)
2 1 3 


[解题思路]

直接回溯裸枚,2^15裸过...


[Code]

{
ID: zane2951
PROG: holstein
LANG: PASCAL
}

program holstein;
var
   w:array[0..51,0..51] of longint;
   v,q,qq:array[0..51] of longint;
   ans,n,m,i,j,top:longint;

//---------check-----------
function check:boolean;
var
   i,j,ce:longint;

begin
   for i:=1 to n do
      begin
         ce:=0;
         for j:=1 to top do ce:=ce+w[q[j],i];
         if cev[i] then exit(false);
      end;
   exit(true);
end;

//----------dfs------------
procedure dfs(dp:longint);
begin
   if dpm then
      begin
         if check and (topans) then begin ans:=top; qq:=q; end;
         exit;
      end;
   inc(top); q[top]:=dp; dfs(dp+1);
   dec(top); dfs(dp+1);
end;

//----------main-----------
begin
   assign(input,'holstein.in'); reset(input);
   assign(output,'holstein.out'); rewrite(output);
   readln(n);
   for i:=1 to n do read(v[i]);
   readln(m);
   for i:=1 to m do
      for j:=1 to n do read(w[i,j]);
   ans:=maxlongint; top:=0;
   dfs(1);
   write(ans);
   for i:=1 to ans do write('':1,qq[i]);
   writeln;
   close(input); close(output);
end.


最新回复(0)
/jishu2zrZSBPbIQ4AFIqhwAxPORG423KriYQhEW7gPg_3D_3D4858305
8 简首页