题海拾贝:P2347 [NOIP 1996 提高组] 砝码称重

Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!

我的博客: <但凡.

我的专栏: 《编程之路》《数据结构与算法之美》《题海拾贝》《C++修炼之路》

欢迎点赞,关注!

1、题目

2、题解

cpp 复制代码
#include<iostream>
using namespace std;
const int N = 1010;
int f[N];
int u[10] = { 0,1,2,3,5,10,20 };
int k[10];
int n, m;
int ret = 0;
int main()
{
	for (int i = 1;i <= 6;i++)
	{
		cin >> k[i];
		ret += k[i] * u[i];
	}
	int sum = 0;
	f[0] = 1;//对0初始化
	for (int i = 1;i <= 6;i++)
	{
		for (int j = ret;j >= 0;j--)//因为j是价值所以说j必须是从0开始
		{
			for (int p = 0;p <= k[i] && p * u[i] <= j;p++)
			{
				f[j] = f[j]||f[j - p * u[i]];//哪个不为0就选哪个行了
			}
		}
	}
	//f表示的是从前i个挑选,能否凑成j。所以说最后得统计方案数
	//另外我们砝码必须都选,也就是必须选6个,所以这个题可以空间优化写
	for (int i = 1;i <= 1000;i++)
	{
		if (f[i]) sum++;
	}
	cout <<"Total=" <<sum << endl;
	return 0;
}
相关推荐
野生的编程萌新42 分钟前
【数据结构】从基础到实战:全面解析归并排序与计数排序
数据结构·算法·排序算法
Mercury_Lc1 小时前
【链表 - LeetCode】206. 反转链表【带ACM调试】
算法·链表
YuTaoShao2 小时前
【LeetCode 热题 100】152. 乘积最大子数组——(解法一)递推
java·算法·leetcode·职场和发展
weixin_307779132 小时前
C++进程监视器与自动启动程序
开发语言·c++·算法
草莓熊Lotso3 小时前
【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day12
c语言·开发语言·c++·刷题
whitepure3 小时前
万字详解常用数据结构(Java版)
java·数据结构·后端
用户7227868123443 小时前
C++ 使用分治减小模板递归深度
c++
CoovallyAIHub3 小时前
目标检测模型评估金标准:mAP全解读,Coovally助你高效调参!
深度学习·算法·计算机视觉
whitepure3 小时前
万字详解常用算法(Java版)
java·后端·算法
CoovallyAIHub3 小时前
基于视觉的果园无人机导航:一种基于干预模仿学习与VAE控制器的真实世界验证
深度学习·算法·计算机视觉