UVA 624 - CD

来源:互联网 发布:java final存放区域 编辑:程序博客网 时间:2024/05/16 09:17

   每个track要么选要么不选,所以dfs也可以做。

#include<iostream>#include<cstring>#include<cstdio>#define MAXN 1100using namespace std;int n,num,track[MAXN],maxx=0;bool vis[MAXN],ans[MAXN];void dfs(int cur,int sum){    if(sum>n)  return ;    if(cur==num)    {        //cout<<"n: "<<n<<endl;        if(sum<=n&&sum>maxx)        {            maxx=sum;            memcpy(ans,vis,sizeof(vis));        }        return ;    }    vis[cur]=true;    sum+=track[cur];    dfs(cur+1,sum);    sum-=track[cur];    vis[cur]=false;    dfs(cur+1,sum);}int main(){    //freopen("in.txt","r",stdin);    while(cin>>n>>num)    {        for(int i=0; i<num; i++)            cin>>track[i];        memset(vis,false,sizeof(vis));        memset(ans,false,sizeof(ans));        maxx=0;        dfs(0,0);        for(int i=0; i<num; i++)        {            if(ans[i]==true)                cout<<track[i]<<" ";        }        cout<<"sum:"<<maxx<<endl;    }    return 0;}


原创粉丝点击