Background
Special for beginners, ^_^
Description
简单的背包问题。设有一个背包,可以放入的重量为s(1≤s≤100)。现有 n(1≤n≤10) 件物品,重量分别为 w1,w2…,wn,(1≤i≤n) 均为正整数,从 n 件物品中挑选若干件,使得放入背包的重量之和正好为 s。找到一组解即可。
Format
Input
第一行是物品总件数和背包的载重量,第二行为各物品的重量。
Output
各所选物品的序号和重量,每件物品一行。
若无解,则输出 “not found”,输出不包括引号。
Samples
输入数据 1
5 10
1 2 3 4 5
输出数据 1
1 1
2 2
3 3
4 4
代码:
#include<bits/stdc++.h>
using namespace std;
int n,s,a[15],ans[15];
bool f(int b,int sum,int cnt)
{
if(sum > s || cnt > n)
{
return false;
}
if(sum == s)
{
for(int i = 1; i <= cnt; i++)
{
cout<<ans[i]<<" "<<a[ans[i]]<<endl;
}
return true;
}
for(int i = b + 1; i <= n; i++)
{
ans[cnt + 1] = i;
if(f(i,sum + a[i],cnt + 1))
{
return true;
}
}
return false;
}
int main()
{
cin>>n>>s;
for(int i = 1; i <= n; i++)
{
cin>>a[i];
}
if(f(0,0,0) == false)
{
cout<<"not found";
}
return 0;
}
该文章介绍了一个简单的背包问题,其中目标是选择物品以使总重量等于给定的背包容量。它提供了一段C++代码来解决这个问题,通过递归地尝试所有可能的物品组合来找到满足条件的解。如果找不到解决方案,则输出notfound。
911

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



