首页 > 其他分享 >日常训练2025-1-13

日常训练2025-1-13

时间:2025-01-13 10:22:12浏览次数:1  
标签:std 表示 13 int 2025 日常 货币 include define

日常训练2025-1-13

P5020 [NOIP2018 提高组] 货币系统

rating:普及+/提高

https://www.luogu.com.cn/problem/P5020

思路

思考一下题目要干什么,原来的货币系统能够表示出一个集合,不能表示出一个集合,现在把货币数量减少之后能表示的集合和不能表示的集合不变——意味着原本的货币系统中有一些货币的存在是不影响表示出的集合的。

那么他们为什么没作用呢?假设能表示出来的货币为 x ,那么 \(x = na_i + ma_j\),如果这里的 \(a_j = ka_i\),也就是说\(a_j\)本身就能被 \(a_i\) 表示,那么 \(a_j\)​ 就是不需要存在的。所以本题就是让我们找哪些货币是能被原本有的货币表示出来的,这些货币需要被删掉。

假设现在要看最大的货币能否被表示,那么小的货币有选与不选两种可能,所以考虑背包。因为大的货币都是被小的货币表示,所以先排个序。

\(f[i][j]\)​:使用前 i 个货币能否表示 j 这个面额,那么 j 的最大值应该为数组中的最大值,对应最大背包容量。

状态转移:\(f[i][j] |= f[i-1][j]\),如果$ j - v[i] >= 0\(,\)f[i][j] |= f[i-1][j-v[i]]$​

最后,如果第 i 个货币 $f[i-1][v[i]] $存在,那么就应该被删除

代码(未优化)

没有优化的原因是优化后只能查看 i == n 时数组中的状态,而我们是需要知道 i 等于其他值时的状态的,所以优化

#include <bits/stdc++.h>

typedef std::pair<long long, long long> pll;
typedef std::pair<int, int> pii;
#define INF 0x3f3f3f3f
#define MOD 998244353
using i64 = long long;
const int N = 1e5+5;

void solve(){
	int n;
	std::cin >> n;

	std::vector<int> v(n+1);
	for (int i = 1; i <= n; i++) std::cin >> v[i];

	std::sort(v.begin(), v.end());

	int V = v[n];
	std::vector f(n+1, std::vector<int>(V+1, 0));

	f[0][0] = 1;

	for (int i = 1; i <= n; i++){
		for (int j = 0; j <= V; j++){
			f[i][j] |= f[i-1][j];
			if (j >= v[i]) f[i][j] |= f[i][j-v[i]];
		}
	}

	int ans = n;
	for (int i = 1; i <= n; i++){
		if (f[i-1][v[i]]) ans -= 1;
	}

	std::cout << ans << '\n';
}

signed main()
{
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	std::cout<<std::setiosflags(std::ios::fixed)<<std::setprecision(2);
	int t = 1, i;
	std::cin >> t;
	for (i = 0; i < t; i++){
		solve();
	}
	return 0;
}

代码(优化)

#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
#define MAXAI 25005
#define MAXN 105
int f[MAXAI];
int a[MAXN];
int main()
{
    //freopen("money.in","r",stdin);
    //freopen("money.out","w",stdout);
    int i,j,n,T,ans;
    scanf("%d",&T);
    while(T--)
    {
        memset(f,0,sizeof(f));
        scanf("%d",&n);ans=n;
        for(i=1;i<=n;i++) scanf("%d",&a[i]);
        sort(a+1,a+n+1);
        f[0]=1;
        for(i=1;i<=n;i++)
        {
            // 此刻的f数组还没有更新刚好表示 i - 1 时的状态。
            if(f[a[i]])
            {
                ans--;
                continue;
            }
            for(j=a[i];j<=a[n];j++)
            {
                f[j]=f[j]|f[j-a[i]];
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}

标签:std,表示,13,int,2025,日常,货币,include,define
From: https://www.cnblogs.com/califeee/p/18668051

相关文章

  • 三年级下册2025年新版人教精通版英语电子课本可以免费下载了
    放假了,又到了复习下学期课本的时候了。这两天,学习的英语李老师告诉大家:如果孩子的寒假作业完成了,可以适当的让孩子预习一下三年级下册的英语了。可是新版英语课本长啥样,老师也还没见过,这下看犯难了,于是开始在网上寻求帮助。然而在数字化时代,信息如潮水般涌来,但有时候,即便是最简......
  • CES 2025盛大开幕,超千家中国企业亮相-乐享数科
    乐享数科了解到,作为全球规模最大、影响力最广的科技展览之一,CES一直以来都是各大科技企业展示创新技术和前沿产品的重要平台。CES2025预计吸引超过4000家参展商和13万名观众参与,展会面积达到180000平米,规模空前。自1967年首次举办以来,CES不仅见证了众多革命性技术的诞生......
  • 2025毕设ssm驾校管理系统程序+论文
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着汽车保有量的不断增加,驾驶技能成为人们日常生活和工作中一项重要的技能,驾校的需求也日益增长。在这样的背景下,驾校的运营管理变得愈发复杂,传......
  • 2025毕设ssm论坛管理系统程序+论文
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着互联网技术的飞速发展,信息交流变得日益频繁和便捷。论坛作为一种重要的网络交互平台,在人们的生活、学习、工作以及社交等多个方面发挥着不可......
  • 复盘工作2025-01
    复盘工作2025-01-121.通过在A方法中创建新线程,新线程里调用(已定义为新开启事务的)B方法来实现B方法代码里能读到A方法里insert的数据:/***1.问题:*业务方法B里执行insert语句插入数据库设备表后,调用方法A,方法A里查视图(视图会查设备表)获取数据后生成......
  • 2025 年 1 月 TIOBE 指数,一月头条:Python 是 TIOBE 2024 年度编程语言!
    2025年1月TIOBE指数一月头条:Python是TIOBE2024年度编程语言!编程语言Python赢得了“TIOBE2024年度编程语言”称号。该奖项授予一年内评级增幅最高的编程语言。Python在2024年增长了9.3%。这远远领先于其竞争对手:Java+2.3%、JavaScript+1.4%和Go+1.2%。......
  • 2025毕设springboot 电影院网上售票系统论文+源码
    系统程序文件列表开题报告内容研究背景随着互联网技术的迅猛发展和人们生活水平的提高,电影院作为重要的休闲娱乐场所,其经营方式和服务模式也在不断变化。传统的电影院售票方式主要依赖于线下的售票窗口和自动售票机,但随着在线购票习惯的普及,网上售票系统已成为电影院不可或......
  • 2025毕设springboot 电影网站系统论文+源码
    系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,数字媒体已成为人们日常生活中不可或缺的一部分,其中电影作为一种重要的文化娱乐形式,深受全球观众的喜爱。近年来,随着在线观影平台的兴起,人们越来越倾向于通过网络平台浏览电影信息、购票以及参与影片讨论。电......
  • java基于WEB的高校实训管理系统论文+源码 2025毕设
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着信息技术的飞速发展,高校教育也在不断地变革与创新。在高校的教学体系中,实训教学作为培养学生实践能力和综合素质的关键环节,其管理的高效性和......
  • java教师信息管理系统论文+源码 2025毕设
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景在现代教育环境下,学校规模不断扩大,教师数量日益增多,教师管理工作变得愈发复杂。传统的人工管理方式已经难以满足需求,效率低下且容易出错。随着信......