hdu 2660 简单 dfs

来源:互联网 发布:软件商店有哪些 编辑:程序博客网 时间:2024/06/01 10:25
#include<stdio.h>int t,n,k,weight,Max,vis[22];struct node{    int p,w;} p[22];void dfs(int wei,int val,int indx,int sum){    if(sum==k||wei==weight)    {        if(Max<val)        {            Max=val;        }        return ;    }    for(int i=indx; i<=n; i++)    {        if(!vis[i]&&sum+1<=k&&wei+p[i].w<=weight)        {            vis[i]=1;            dfs(wei+p[i].w,val+p[i].p,i+1,sum+1);            vis[i]=0;        }    }    return ;}int main(){    scanf("%d",&t);    int i,j;    while(t--)    {        scanf( "%d%d",&n,&k );        for(i=1; i<=n; i++)        {            scanf("%d%d",&p[i].p,&p[i].w);            vis[i]=0;        }        scanf("%d",&weight);        Max=0;        dfs(0,0,0,0);        printf("%d\n",Max);    }    return 0;}