【题解】Healthy Holsteins

来源于USACO Training Gateway
重拾OI后的第一道水题,却调了一定时间,主要是边界没考虑好,这次写代码习惯倒是不错,简单的DFS,关键还是在于退出边界设置。
代码挺丑的。

#include
#include
#include
#include
#include
#include
using namespace std;

int v,g,t;
int m=100;
int w[30],s[20][30],f[20],r[20];
void work(int d)
{
 int i,c=0;
 if(d>g+1) return;
 int b=1;
 for(i=1;i<=v;i++)
   if(w[i]>0)
    {
    b=0;
    break;
}

 if(b==1) {
  if(m>t)
  {
   m=t;
   for(i=1;i<=g;i++)
    if(f[i])r[++c]=i;
  }
  return;   
 }

 f[d]=1;
 t++;
 for(i=1;i<=v;i++)
  w[i]-=s[d][i];
 work(d+1);

 f[d]=0;
 t--;
 for(i=1;i<=v;i++)
  w[i]+=s[d][i];
  work(d+1); 

}
int main()
{
 cin>>v;
 for(int i=1;i<=v;i++)
  cin>>w[i];
 cin>>g;
 for(int i=1;i<=g;i++)
  for(int j=1;j<=v;j++)
   cin>>s[i][j];
 work(1);
 cout<" ";
 for(int i=1;i<=m;i++)
  cout<" ";      
}

你可能感兴趣的:(OI)