背包问题

来源:互联网 发布:古琴调音软件 编辑:程序博客网 时间:2024/06/06 18:34

Problem Description

简单的背包问题。设有一个背包,可以放入的重量为s。现有n(n<=10)件物品,重量分别为w1,w2,...,wn,均为正整数,从n件物品中挑选若干件,使得放入背包的重量之和正好为s。找到一组解即可。如果找不到输出“not found”。

Input

输入有多组数据,每组数据的第1行是物品总件数和背包的载重量,第2行为各物品的重量。

Output

对于每组数据输出各所选物品的序号和重量。

Sample Input

5 101 2 3 4 5

Sample Output

number:1  weight:1number:4  weight:4number:5  weight:5

Author

HYNU



代码:


#include<stdio.h>#include<string.h>int p[15],n,vis[15],a[15],flag;long m;void dfs(long sum){if(flag) return ;if(sum==m) {for(int j=1;j<=n;j++)   if(a[j]) printf("number:%d  weight:%d\n",j,a[j]);flag=1; return ;}for(int i=n;i>=1;i--){   if(!vis[i]){      vis[i]=1;a[i]=p[i];dfs(sum+p[i]);a[i]=0;vis[i]=0;}}}int main(){    int i,j; while(scanf("%d%d",&n,&m)!=EOF) {  memset(vis,0,sizeof(vis));      memset(a,0,sizeof(a));  for(i=1;i<=n;i++)        scanf("%d",&p[i]);  flag=0;  dfs(0);  if(flag==0) printf("not found\n");   } return 0;}


0 0
原创粉丝点击