USCAO 2.1.4

来源:互联网 发布:js获取文件大小 编辑:程序博客网 时间:2024/05/31 13:16

       在写这个题之前我想问一下,有没有知道在贴代码的时候如何使代码排版风格与原来保持一致,尤其是缩进,原来是按tab键的地方放到博客里就变成了一个空格,这样会显得代码很没有层次感。。。。求教。。。

      这个题的意思大概是给出奶牛所需的各种维生素的数量和各种饲料里含有的各种维生素的量,要求你找出一种配料方案来使得用到的饲料种类最小且能满足奶牛对各种维生素的需求。

      对于每种饲料只有两种选择:要么选用,要么不选用。那么就可以对所有的饲料进行一个排列组合选出符合要求的种类最小的组合即可,可用DFS来解决。

 

#include<stdio.h>
#include<iostream>
using namespace std;
int n,v[26],m,g[16][26],now[26],res[16],dat[16],minn=1000;
void dfs(int deep,int cnt)
{
 if(deep>m)
 {
  for(int i=1;i<=n;i++)
   if(now[i]<v[i])
    return;
  if(cnt<minn)
  {
   minn=cnt;
   for(int i=1;i<=minn;i++)
    res[i]=dat[i];
  }
  return;
 }
  dat[cnt+1]=deep;
  for(int i=1;i<=n;i++)
   now[i]+=g[deep][i];
  dfs(deep+1,cnt+1);
  for(int i=1;i<=n;i++)
   now[i]-=g[deep][i];
  dfs(deep+1,cnt);
 
}
int main()
{
 freopen("holstein.in","r",stdin);
 freopen("holstein.out","w",stdout);
 cin>>n;
 for(int i=1;i<=n;i++)
  cin>>v[i];
 cin>>m;
 for(int i=1;i<=m;i++)
  for(int j=1;j<=n;j++)
   cin>>g[i][j];
 for(int i=1;i<=n;i++)
  now[i]=0;
 dfs(1,0);
 cout<<minn;
 for(int i=1;i<=minn;i++)
  cout<<" "<<res[i];
 cout<<endl;
 return 0;
}

原创粉丝点击