#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;
}
hdu 2660 简单 dfs
最新推荐文章于 2020-01-13 13:49:23 发布