您的位置:首页 > 其它

【题解】Healthy Holsteins

2016-02-15 15:09 260 查看
来源于USACO Training Gateway

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

代码挺丑的。

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
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<<m<<" ";
for(int i=1;i<=m;i++)
cout<<r[i]<<" ";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dfs