【完全背包求方案数问题】AcWing1023.买书(赋练习题目)

【题目链接】活动 - AcWing

输入样例1:
复制代码
20
输出样例1:
复制代码
2
输入样例2:
复制代码
15
输出样例2:
复制代码
0
输入样例3:
复制代码
0
输出样例3:
复制代码
1

【代码】

cpp 复制代码
//1023.买书------完全背包问题
 #include<bits/stdc++.h>
 using namespace std;
 int a[5]={0,10,20,50,100};
 int dp[5][1010];
 int main()
 {
 	int n;
 	cin>>n;
 	dp[0][0]=1;
 	for(int i=1;i<=4;i++)
 	{
 		for(int j=0;j<=n;j++)
 		{
 			dp[i][j]=dp[i-1][j];
 			if(j>=a[i]) dp[i][j]+=dp[i][j-a[i]];
 		}	
 	}	
 	cout<<dp[4][n];
 	return 0;
 } 

【完全背包优化后代码】

cpp 复制代码
//优化后
//1023.买书------完全背包问题
#include<bits/stdc++.h>
using namespace std;
int a[5]={0,10,20,50,100};
int dp[1010];
int main()
{
	int n;
	cin>>n;
	dp[0]=1;
	for(int i=1;i<=4;i++)
	{
		for(int j=a[i];j<=n;j++)
		{
			dp[j]+=dp[j-a[i]];
		}	
	}	
	cout<<dp[n];
	return 0;
} 

【相似题目------AcWing1371.货币系统】

【题目链接】 1371. 货币系统 - AcWing题库

输入样例:
复制代码
3 10
1 2 5
输出样例:
复制代码
10

【代码及注释】

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
ll dp[30][N];
int v[N];
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>v[i];		
	}
	dp[0][0]=1;
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<=m;j++)
		{
			dp[i][j]=dp[i-1][j];//不选择第i个物品
			if(j>=v[i]) dp[i][j]+=dp[i][j-v[i]]; 
		}
	}
	cout<<dp[n][m];
	return 0;
} 

【优化后代码】

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
ll dp[N];
int v[N];
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>v[i];		
	}
	dp[0]=1;
	for(int i=1;i<=n;i++)
	{
		for(int j=v[i];j<=m;j++)
		{
			dp[j]+=dp[j-v[i]]; 
		}
	}
	cout<<dp[m];
	return 0;
} 
相关推荐
EmbedLinX2 分钟前
C++ 面向对象
开发语言·c++
weixin_445402309 分钟前
C++中的命令模式变体
开发语言·c++·算法
季明洵11 分钟前
C语言实现顺序表
数据结构·算法·c·顺序表
Hgfdsaqwr17 分钟前
实时控制系统优化
开发语言·c++·算法
CSDN_RTKLIB17 分钟前
Visual Studio不改变文件编码情况下解决C2001
c++·ide·visual studio
D_evil__33 分钟前
【Effective Modern C++】第三章 转向现代C++:15. 尽可能使用constexpr
c++
2301_8213696143 分钟前
嵌入式实时C++编程
开发语言·c++·算法
sjjhd6521 小时前
多核并行计算优化
开发语言·c++·算法
weixin_395448911 小时前
main.c_cursor_0130
前端·网络·算法
田野追逐星光1 小时前
STL的容器vector的模拟实现
开发语言·c++