关于背包方案数的问题
  • 板块灌水区
  • 楼主StranGePants
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/1/30 22:48
  • 上次更新2023/11/5 04:07:01
查看原帖
关于背包方案数的问题
333152
StranGePants楼主2021/1/30 22:48

第一份代码

#include<cstdio>
#include<iostream>
using namespace std;
int n,m,a[1005];
long long dp[1005];
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	dp[0]=1;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(j-a[i]>=0)
			{
				dp[j]+=dp[j-a[i]];
			}
		}
	}
	printf("%lld",dp[m]);
	return 0;
}

第二份代码

#include<cstdio>
#include<iostream>
using namespace std;
int n,m,a[1005];
long long dp[1005];
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	dp[0]=1;
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(i-a[j]>=0)
			{
				dp[i]+=dp[i-a[j]];
			}
		}
	}
	printf("%lld",dp[m]);
	return 0;
}

为何前一个不考虑顺序,后一个考虑顺序?

2021/1/30 22:48
加载中...