[NOIp2018]货币系统 背包
LG传送门
完全背包板子题
显然就是判断有多少种面值的货币可以被其他面值的货币表示,完全背包搞一搞就好了。
考场代码(一看这两格缩进就知道是考场代码):
#include<cstdio>
#include<cstring>
#include<algorithm>
#define R register
#define I inline
using namespace std;
const int S=110,N=25010;
I int rd(){
R int f=0; R char c=getchar();
while(c<48||c>57) c=getchar();
while(c>47&&c<58) f=f*10+(c^48),c=getchar();
return f;
}
int a[S],f[N];
I int max(int x,int y){return x>y?x:y;}
int main(){
R int T=rd(),n,m,p,i,j,k;
while(T--){
n=rd(),m=0,p=0,memset(f,0,sizeof f),f[0]=1;
for(i=1;i<=n;++i) a[i]=rd(),p=max(p,a[i]);
sort(a+1,a+1+n);
for(i=1,k=1;i<=p;++i){
for(j=1;j<k;++j)
if(f[i-a[j]]){f[i]=1; break;}
if(i==a[k]){
if(f[i]) ++m;
f[a[k]]=1,++k;
}
}
printf("%d\n",n-m);
}
return 0;
}
仔细一看我的考场代码写好像把完全背包板子里面那层循环丢到外面来了,然而跑得飞快,洛谷上测72ms,下面有正常写法394ms。
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
#define R register
#define I inline
using namespace std;
const int S=110,N=2500010;
char buf[S],*p1,*p2;
I char gc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,S,stdin),p1==p2)?EOF:*p1++;}
I int rd(){
R int f=0,b=1; R char c=gc();
while((c<48||c>57)&&c!=45) c=gc();
if(c==45) b=0,c=gc();
while(c>47&&c<58) f=(f<<3)+(f<<1)+(c^48),c=gc();
return b?f:~f+1;
}
int a[S],f[N];
I int max(int x,int y){return x>y?x:y;}
int main(){
R int T=rd(),n,m,p,i,j;
while(T--){
n=rd(),m=0,p=0,memset(f,0,sizeof f),f[0]=1;
for(i=1;i<=n;++i) a[i]=rd(),p=max(p,a[i]);
sort(a+1,a+1+n);
for(i=1;i<=n;++i){
if(f[a[i]]) ++m;
for(j=a[i];j<=p;++j)
if(f[j-a[i]]) f[j]=1;
}
printf("%d\n",n-m);
}
return 0;
}
[NOIp2018]货币系统 背包的更多相关文章
- 【LG5020】[NOIP2018]货币系统
[LG5020][NOIP2018]货币系统 题面 洛谷 题解 考场上第一眼还不会233 可以发现只要可以被其他的货币通过一些奇奇怪怪的方式表示出来的货币就\(ban\)掉即可 就是个完全背包 我是统 ...
- luogu5020 [NOIp2018]货币系统 (完全背包)
我那个新的货币系统,就是把原来的货币系统中能被其他数表示的数删掉 那我就算有多少数能被别的数表示,那肯定是要被比它小的表示 于是排个序做完全背包就好了 但是我太zz不会完全背包,然后写了个bitset ...
- NOIP2018货币系统
题目大意 给出一组数,求出其中共有多少数不能被其他数表示 解题思路 法一:可爱的动态规划 这个思路还是比较好想的(也比较好写?) 有依赖关系的背包,思路这道题是差不多的 填满型01背包 (关于代码) ...
- 【比赛】NOIP2018 货币系统
可以发现最后的集合一定是给定集合的子集 所以就变成了裸的背包嘛,对于每个数判断它能不能被其它数表示出来,如果可以,就表示这个数是没用的,可以去掉 #include<bits/stdc++.h&g ...
- 洛谷P1474货币系统——背包方案计数
题目:https://www.luogu.org/problemnew/show/P1474 完全背包,注意方案计数的方法. 代码如下: #include<iostream> #inclu ...
- NOIP2018 货币系统
题面 思路 先分析一下,a集合的子集肯定不存在可以用它来表示的数,a集合是不能够表示的. 所以问题简化了成为选出a的一个子集(个数最少),能够表达a集合所有能表达的数. 接下来继续分析 如:1 2 4 ...
- 【数学】【背包】【NOIP2018】P5020 货币系统
传送门 Description 在网友的国度中共有 \(n\) 种不同面额的货币,第 \(i\) 种货币的面额为 \(a[i]\),你可以假设每一种货币都有无穷多张.为了方便,我们把货币种数为 \(n ...
- [NOIp2018提高组]货币系统
[NOIp2018提高组]货币系统 题目大意: 有\(n(n\le100)\)种不同的货币,每种货币的面额为\([1,25000]\)之间的一个整数.若两种货币系统能够组合出来的数是相同的的,那我们就 ...
- P1474 货币系统 Money Systems(完全背包)(大水题)
题目描述 母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对货币的数值感到好奇. 传统地,一个货币系统是由1,5,10,20 或 25,50, 和 100的单 ...
随机推荐
- ESP和EBP 栈顶指针和栈底指针
http://blog.csdn.net/hutao1101175783/article/details/40128587 (1)ESP:栈指针寄存器(extended stack pointer), ...
- css注入获取网页中的数据
<style><?php echo htmlspecialchars($_GET['x']);?></style> <br><br>< ...
- Odoo启动配置文件
转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9278687.html 1:--xmlrpc-port=<端口> 命令选项充许我们将服务器实例的侦听 ...
- mean函数一个神代码
cs231n上的一个代码,能求出准确率: print 'accuracy: %f' % ( np.mean(Yte_predict == Yte) ) >>> a = np.arra ...
- MFC窗体程序中添加调试控制台
在编写复杂程序的过程中,我们经常需要将一些信息输出到文件或者屏幕上.较控制台应用程序,MFC窗体程序要显得麻烦一些! 下面有2种方法来实现为MFC窗体程序添加调试控制台,方便程序员调试程序和了解当前程 ...
- PAT——1064. 朋友数
如果两个整数各位数字的和是一样的,则被称为是“朋友数”,而那个公共的和就是它们的“朋友证号”.例如123和51就是朋友数,因为1+2+3 = 5+1 = 6,而6就是它们的朋友证号.给定一些整数,要求 ...
- JNI由浅入深_7_c调用Java方法一
1.在Java中声明方法 <span style="font-size:14px;">/** * javah -encoding utf-8 -jni com.exam ...
- HDU 2544最短路 (迪杰斯特拉算法)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2544 最短路 Time Limit: 5000/1000 MS (Java/Others) Me ...
- 怎样卸载wineQQ?
好久没实用ubuntu系统的wineqq了.今天用的时候,提示无法使用,要求官网又一次下载新版本号, 感觉挺麻烦的,准备卸载,半天卸载不了. 经过努力,终于还是卸载了. 卸载命令: sudo dpk ...
- 【星云测试】开发者测试(3)-采用精准测试工具对springcloud微服务应用进行穿透测试
1.微服务简介 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小的Web服务可以独立地编译及部署,并通过各自暴露的API接 ...