题目地址:http://jobdu.sinaapp.com/problem.php?pid=1025
C语言源码:
//暴力搜索
#include<stdio.h>
int visited[31];
int n;
double max,q;
double a[31];
void dfs(double sum)
{
int i;
for(i=0;i<n;i++)
{
if(visited[i]==0)
{
visited[i]=1;
if(sum+a[i]<=q)
dfs(sum+a[i]);
else
dfs(sum);
visited[i]=0;
}
}
if(sum>max)
max=sum;
}
int main()
{
int i,j,top,m,flag;
double sum,p;
char s;
scanf("%lf %d",&q,&n);
while(n)
{
top=0;
for(i=0;i<n;i++)
{
scanf("%d",&m);
sum=0;
flag=0;
while(m--)
{
scanf(" %c:%lf",&s,&p);
if(s!='A'&&s!='B'&&s!='C'||p>600)
{
sum=0;
flag=1;
continue;
}
else
sum+=p;
}
if(flag==0&&sum<=1000)
a[top++]=sum;
}
n=top;
max=0;
for(i=0;i<31;i++)
visited[i]=0;
dfs(0);
printf("%.2lf\n",max);
scanf("%lf %d",&q,&n);
}
}
本文提供了一个使用C语言实现的暴力搜索算法来解决背包问题的示例代码。该算法通过深度优先遍历所有可能的组合,寻找在不超过限定重量的情况下能够获得的最大价值。
421

被折叠的 条评论
为什么被折叠?



