萌新求助背包求方案数
  • 板块学术版
  • 楼主mot1ve
  • 当前回复7
  • 已保存回复7
  • 发布时间2021/11/16 16:25
  • 上次更新2023/11/4 00:24:49
查看原帖
萌新求助背包求方案数
250699
mot1ve楼主2021/11/16 16:25

题目

刻度点*重量作为一个物品

分组背包求方案数:因为有负数,我用了map代替数组,不知道为什么代码输出不对。

//01背包求恰好装满的方案数 
#include<bits/stdc++.h>
using namespace std;
int n,m;
int w[110][110],a[110],b[110];
map<int,int> f;
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=m;i++)
	{
		scanf("%d",&b[i]);
	}
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)//每组内物品 
		{
			w[i][j]=a[j]*b[i];
		}
	}
	f[0]=1;
	for(int i=1;i<=m;i++)//一共m组 
	{
		for(int j=1000;j>=-1000;j--)
		{
			for(int k=1;k<=n;k++)//每组里n个
			{
				f[j]+=f[j-w[i][k]];
			} 
		}
	}
	cout<<f[0];
	return 0;
} 
2021/11/16 16:25
加载中...