题目大意

给出一组数,求出其中共有多少数不能被其他数表示

解题思路

法一:可爱的动态规划

这个思路还是比较好想的(也比较好写?)

有依赖关系的背包,思路这道题是差不多的 填满型01背包

(关于代码) 写起来坑还是比较多的,ans,f记得清零,边界记得写就不说了,转移方程那里

f[j] |= f[j - a[i]];  

或符号是一定要加的,举个栗子说明:

以样例为例

a[i] = 3,更新f[3],f[6],f[9],f[12]等等,如果不写或符号,  在a[i]=10更新时会出现 f[12] = f[2] = 0的情况

#include<bits/stdc++.h>
using namespace std;
const int N = ;
#define fr(i,n) for(register int i = 1; i <= n; i++)
int n,t,m,ans,maxn,a[N],f[N]; int main()
{
scanf("%d",&t);
while(t--){
scanf("%d",&n);
fr(i,n) scanf("%d",a + i);
sort(a + , a + + n);
ans = ;
memset(f,,sizeof(f)); f[0]=1;
fr(i,n){
if(f[a[i]]) continue;
ans++;
f[a[i]] = ;
for(int j = a[i]; j <= a[n]; j++)
f[j] |= f[j - a[i]]; }
printf("%d\n",ans);
}
return ;
}
法二:

某种筛(原谅数论全忘光的蒟蒻不知道这是哪种)

实际上和背包思路差不多的……然鹅因为是成倍成倍的筛的所以可能快点?emmm

下面是luogu题解大佬 txtxj 的代码(对我真的懒得打)

#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int mon[]={};
/*
mon[i]=0 表示i面值的钱不能被凑出来
mon[i]=1 表示i面值的钱可以被凑出来
mon[i]=2 表示i面值的钱是货币系统中本来就有的钱
*/
int coins[]={};//存钱的面值
int T,n,ans=;
int main()
{
scanf("%d ",&T);
while (T--)
{
ans=;
memset(mon,,sizeof(mon));
memset(coins,,sizeof(coins));
scanf("%d",&n);
for (int i=;i<=n;i++)
{
scanf("%d",&coins[i]);
mon[coins[i]]=;
}
//把货币系统中的钱标好
sort(coins+,coins++n);
for (int i=;i<=coins[n];i++)
{
if (mon[i]>)
//如果mon[i]能被凑出来
//那么mon[i+coins[j]]也能被凑出来
{
for (int j=;j<=n;j++)
if (i+coins[j]<=coins[n])
//防止数组越界
mon[i+coins[j]]=;
else break;
}
}
for (int i=;i<=coins[n];i++)
if (mon[i]==) ans++;
printf("%d\n",ans);
}
}

NOIP2018货币系统的更多相关文章

  1. 【LG5020】[NOIP2018]货币系统

    [LG5020][NOIP2018]货币系统 题面 洛谷 题解 考场上第一眼还不会233 可以发现只要可以被其他的货币通过一些奇奇怪怪的方式表示出来的货币就\(ban\)掉即可 就是个完全背包 我是统 ...

  2. luogu5020 [NOIp2018]货币系统 (完全背包)

    我那个新的货币系统,就是把原来的货币系统中能被其他数表示的数删掉 那我就算有多少数能被别的数表示,那肯定是要被比它小的表示 于是排个序做完全背包就好了 但是我太zz不会完全背包,然后写了个bitset ...

  3. [NOIp2018]货币系统 背包

    LG传送门 完全背包板子题 显然就是判断有多少种面值的货币可以被其他面值的货币表示,完全背包搞一搞就好了. 考场代码(一看这两格缩进就知道是考场代码): #include<cstdio> ...

  4. 【比赛】NOIP2018 货币系统

    可以发现最后的集合一定是给定集合的子集 所以就变成了裸的背包嘛,对于每个数判断它能不能被其它数表示出来,如果可以,就表示这个数是没用的,可以去掉 #include<bits/stdc++.h&g ...

  5. NOIP2018 货币系统

    题面 思路 先分析一下,a集合的子集肯定不存在可以用它来表示的数,a集合是不能够表示的. 所以问题简化了成为选出a的一个子集(个数最少),能够表达a集合所有能表达的数. 接下来继续分析 如:1 2 4 ...

  6. [NOIp2018提高组]货币系统

    [NOIp2018提高组]货币系统 题目大意: 有\(n(n\le100)\)种不同的货币,每种货币的面额为\([1,25000]\)之间的一个整数.若两种货币系统能够组合出来的数是相同的的,那我们就 ...

  7. 【数学】【背包】【NOIP2018】P5020 货币系统

    传送门 Description 在网友的国度中共有 \(n\) 种不同面额的货币,第 \(i\) 种货币的面额为 \(a[i]\),你可以假设每一种货币都有无穷多张.为了方便,我们把货币种数为 \(n ...

  8. [NOIp2018] luogu P5020 货币系统

    还在补暑假作业. 题目描述 你有一个由 NNN 种面值的货币组成的货币系统.定义两个货币系统等价,当且仅当 ∀x∈N∗\forall x\in\N^*∀x∈N∗ 要么同时能被两个货币系统表示,要么同时 ...

  9. @NOIP2018 - D1T2@ 货币系统

    目录 @题目描述@ @题解@ @代码@ @题目描述@ 在网友的国度中共有 n 种不同面额的货币,第 i 种货币的面额为 a[i],你可以假设每一种货币都有无穷多张.为了方便,我们把货币种数为 n.面额 ...

随机推荐

  1. 转:查看oracle数据库允许的最大连接数和当前连接数

    在查看数据的连接情况很有用,写完程序一边测试代码一边查看数据库连接的释放情况有助于分析优化出一个健壮的系统程序来. 1.查看当前的数据库连接数 select count(*) from v$proce ...

  2. ZooKeeper的ACL实现源码阅读

    什么是ACL(Access Control List) zookeeper在分布式系统中承担中间件的作用,它管理的每一个节点上可能都存储这重要的信息,因为应用可以读取到任意节点,这就可能造成安全问题, ...

  3. 浅析html+css+javascript之间的关系与作用

    三者间的关系 一个基本的网站包含很多个网页,一个网页由html, css和javascript组成. html是主体,装载各种dom元素:css用来装饰dom元素:javascript控制dom元素. ...

  4. 虚拟机VMware14 pro下安装REHL5U11

    1. 创建虚拟磁盘,自定义,磁盘类型选IDE,确保安装系统过程中只有一个物理光盘驱动/ISO镜像: 2. 安装VMware Tools 2.1 虚拟机>安装VMware Tools 2.2 在光 ...

  5. Gradle 梳理 - 插件

    Gradle 教程:第二部分,JAVA PROJECTS[翻译]   原文地址:http://rominirani.com/2014/07/28/gradle-tutorial-part-2-java ...

  6. js实现敲回车键登录

    任何一个网站页面都有登陆界面,很多时候在输入好用户名和密码后,还要用鼠标去点一个类似于登陆什么的按钮或者链接.这样你才能进网站做你喜欢做的事情. 有时候我就在想是不是能在输入好我该输入的东西后,直接敲 ...

  7. springboot 集成Redis单机

    1.redis服务搭建 centos7 搭建redis服务 2.接入相关 pom文件依赖引入 <dependencies> <dependency> <groupId&g ...

  8. 百万it资源百度网盘链接分享

    自己大量时间整理的优质资源,容量达3000多G,有需要的朋友可以微我,资源截图:  面试资料: 书籍类: 视频类: 以上只是部分资源,想要资源的亲请加微信咨询. 欢迎加微信咨询,请备注资源: 独乐乐不 ...

  9. 利用Travis CI+GitHub实现持续集成和自动部署

    前言 如果你手动部署过项目,一定会深感持续集成的必要性,因为手动部署实在又繁琐又耗时,虽然部署流程基本固定,依然容易出错. 如果你很熟悉持续集成,一定会同意这样的观点:"使用它已经成为一种标 ...

  10. Java 学习笔记之 JVM初识

    JVM初识: java只是启动JVM的命令.JVM真实位置: C:\Program Files\Java\jdk1.8.0_121\jre\bin\server\jvm.dll 1. 第一行JDK版本 ...