USACO-Section2.1 Healthy Holsteins

来源:互联网 发布:为什么要用react.js 编辑:程序博客网 时间:2024/05/17 07:23

2017-8-15

题目描述

1.喂给牛的饲料的种数最少2.所需的饲料剂量最少3.输出饲料序号最小的

解答

我用的是dfs求出所有情况1.最大种数从1开始到n,若当前种数有满足条件的,就是他了,break即可2.每次k从1开始为了节省数组r的空间3.set函数!!!

代码

/*ID: 18795871PROG: holsteinLANG: C++*/#include<iostream>#include<fstream>#include<cstring>using namespace std;const int M = 25,N = 15;ifstream fin("holstein.in");ofstream fout("holstein.out");int x[M+1],y[N+1][M+1]; //initint s[M+1]; //sum:nowint r[10000][N+1]; //type:nowbool f[N+1],res=false;int now,m,n,sum=0,k=1,qq;bool flag(){ //判断当前是否符合条件    for (int i=1;i<=m;i++){        if (s[i]<x[i]) return false;    }    return true;}int fun(){ //求出当前所需的饲料剂量    int res=0;    for (int i=1;i<=m;i++){       res+=s[i];    }    return res;}void cal(int j){     for (int i=1;i<=m;i++){        s[i]+=y[j][i];    }}void mul(int j){     for (int i=1;i<=m;i++){        s[i]-=y[j][i];    }}void set(int p){    for (int i=1;i<=k;i++){        for (int j=0;j<p;j++){            if (!r[i][j]){                r[i][j]=r[i-1][j];            }        }    }}void dfs(int step,int cnt){   if (step==n+1){      k++;      return ;   }   if (cnt==now){       set(cnt);       if (flag()){          int fun_res=fun();          if (sum==0||(sum!=0&&fun_res<sum)){             qq=k;             sum=fun_res;          }          res=true;       }       k++;       return ;   }   for (int i=step+1;i<=n;i++){          if (!f[i]){             cal(i);             r[k][cnt]=i;             f[i]=true;             dfs(i,cnt+1);             f[i]=false;             mul(i);          }   }}void show(int p){    int i;    fout<<now<<" ";    for (i=0;i<now-1;i++){        fout<<r[p][i]<<" ";    }    fout<<r[p][i]<<endl;}int main(){    int i,j;    fin>>m;    for (i=1;i<=m;i++){        fin>>x[i];    }    fin>>n;    for (i=1;i<=n;i++){        for (j=1;j<=m;j++){            fin>>y[i][j];        }    }    for (i=1;i<=n;i++){        if (res) break;        now=i;        k=1;        memset(s,0,sizeof(s));        memset(f,false,sizeof(f));         memset(r,0,sizeof(r));        dfs(0,0);    }    show(qq);    return 0;}
原创粉丝点击