洛谷P5020 货币系统

题目

题意简化一下就是找题目给定的n个数最多能消掉多少个,我们用个tong[i]来记录i这个数值能不能用小于等于i的货币组合起来,等于1意味着他只能由自己本身的货币组成,等于2说明他可以被其他货币组成(此时的数不一定是货币,但等于2的货币不能要),最后只需要统计一下n个数里有几个tong等于1即可,然后对于每个tong等于1或2的数,都可以跟另外一个tong等于1或2的数组合起来,又可以递推求解tong数组了

//long long,inline后加函数类型
//关键字:y1,time,tm,end,next,hash, j0,j1,jn,y0,yn,_end会re;
#include <bits/stdc++.h>
#define N 1001001
using namespace std;
int a[N], dp[N], tong[N];
int main()
{
 	int T;
// 	freopen("ha.txt", "w", stdout); 
 	scanf ("%d", &T);
 	while (T--)
 	{							
	 	int n, ans = 0;					
	 	memset(tong, 0, sizeof(tong));
	 	memset(dp, 0, sizeof(dp));
	 	scanf("%d", &n);
	 	for (int i = 1; i <= n; i++)
	 		scanf("%d", &a[i]), tong[a[i]] = 1;//tong代表此数已经可以被消掉.
	 	sort(a + 1, a + 1 + n);
	 	for (int i = 1; i <= n; i++)
	 	{
	 		if (tong[a[i]] != 2)
			 	ans++;
	 		for (int j = 1; j <= 25000; j++)
	 		{
	 			if (tong[j] == 1 || tong[j] == 2)//j可以被表示出来
	 			tong[a[i] + j] = 2; 
			}
	 	}
	 	printf("%d\n", ans);
 	}
 	return 0;
}
posted @   DAGGGGGGGGGGGG  阅读(192)  评论(0编辑  收藏  举报
编辑推荐:
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
阅读排行:
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· C# 从零开始使用Layui.Wpf库开发WPF客户端
· 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
· C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)
· 接口重试的7种常用方案!
点击右上角即可分享
微信分享提示