yzmtf2008吧 关注:0贴子:15
  • 1回复贴,共1
/*ID: yzmtf201PROG: holsteinLANG: C++*/#include <iostream>#include <cstdio>#include <algorithm>#include <queue>using namespace std;struct node{ int vit[25]; bool visited[25];} tmp,tmp1;deque<node> q;int v,g,goal[100],food[15][25],k;void add(int i,node a,node&b){ for(int j=0; j<v; j++) b.vit[j]=a.vit[j]+food[i][j];}bool check(node a){ for(int i=0; i<v; i++) if(goal[i]>a.vit[i])return false; return true;}void out(node a){ int i,list[100]; for(i=0; i<g; i++) if(a.visited[i])list[k++]=i+1; printf("%d ",k); for(i=0; i<k-1; i++) printf("%d ",list[i]); printf("%d\n",list[i]);}int main(){ freopen("holstein.in", "r", stdin); freopen("holstein.out", "w", stdout); int i,j; scanf("%d",&v); for(i=0; i<v; i++) scanf("%d",&goal[i]); scanf("%d",&g); for(i=0; i<g; i++) for(j=0; j<v; j++) scanf("%d",&food[i][j]); for(i=0; i<v; i++) tmp.vit[i]=0; q.push_back(tmp); while(!q.empty()) { tmp=q.front(); for(i=0; i<g; i++) { if(tmp.visited[i])continue; tmp1=tmp; tmp1.visited[i]=true; add(i,tmp,tmp1); //for(j=0;j<v;j++) //printf("%d ",tmp1.vit[i]); //printf("\n"); if(check(tmp1)) { out(tmp1); return 0;//== == == == END. } else q.push_back(tmp1); } q.pop_front(); } //== == == == actually,never reach here... return 0;}



1楼2011-08-10 23:36回复
    /*
    ID: yzmtf201
    PROG: holstein
    LANG: C++
    */
    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <queue>
    using namespace std;
    struct node
    {
    int vit[25];
    bool visited[25];
    } tmp,tmp1;
    deque<node> q;
    int v,g,goal[100],food[15][25],k;
    void add(int i,node a,node&b)
    {
    for(int j=0; j<v; j++)
    b.vit[j]=a.vit[j]+food[i][j];
    }
    bool check(node a)
    {
    for(int i=0; i<v; i++)
    if(goal[i]>a.vit[i])return false;
    return true;
    }
    void out(node a)
    {
    int i,list[100];
    for(i=0; i<g; i++)
    if(a.visited[i])list[k++]=i+1;
    printf("%d ",k);
    for(i=0; i<k-1; i++)
    printf("%d ",list[i]);
    printf("%d\n",list[i]);
    }
    int main()
    {
    freopen("holstein.in", "r", stdin);
    freopen("holstein.out", "w", stdout);
    int i,j;
    scanf("%d",&v);
    for(i=0; i<v; i++)
    scanf("%d",&goal[i]);
    scanf("%d",&g);
    for(i=0; i<g; i++)
    for(j=0; j<v; j++)
    scanf("%d",&food[i][j]);
    for(i=0; i<v; i++)
    tmp.vit[i]=0;
    q.push_back(tmp);
    while(!q.empty())
    {
    tmp=q.front();
    for(i=0; i<g; i++)
    {
    if(tmp.visited[i])continue;
    tmp1=tmp;
    tmp1.visited[i]=true;
    add(i,tmp,tmp1);
    //for(j=0;j<v;j++)
    //printf("%d ",tmp1.vit[i]);
    //printf("\n");
    if(check(tmp1))
    {
    out(tmp1);
    return 0;//== == == == END.
    }
    else q.push_back(tmp1);
    }
    q.pop_front();
    }
    //== == == == actually,never reach here...
    return 0;
    }


    2楼2011-08-10 23:36
    回复