zoukankan      html  css  js  c++  java
  • [NOIp2018提高组]货币系统

    [NOIp2018提高组]货币系统

    题目大意:

    (n(nle100))种不同的货币,每种货币的面额为([1,25000])之间的一个整数。若两种货币系统能够组合出来的数是相同的的,那我们就称这两种货币系统是等价的。给定一个货币系统,求不同面额货币数最少的等价的货币系统。

    思路:

    将面额从小到大排序,如果一种面额能够被其它面额表示出来,那么这种面额就是多余的。因此只需要跑一个背包即可。

    源代码:

    #include<cstdio>
    #include<cctype>
    #include<cstring>
    #include<algorithm>
    inline int getint() {
    	register char ch;
    	while(!isdigit(ch=getchar()));
    	register int x=ch^'0';
    	while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
    	return x;
    }
    const int N=101,M=25001;
    int a[N];
    bool f[M];
    int main() {
    	for(register int T=getint();T;T--) {
    		const int n=getint();
    		int m=0;
    		for(register int i=1;i<=n;i++) {
    			a[i]=getint();
    			m=std::max(m,a[i]);
    		}
    		std::sort(&a[1],&a[n]+1);
    		memset(f,0,sizeof f);
    		f[0]=true;
    		int ans=0;
    		for(register int i=1;i<=n;i++) {
    			if(f[a[i]]) continue;
    			ans++;
    			for(register int j=a[i];j<=m;j++) {
    				f[j]|=f[j-a[i]];
    			}
    		}
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    VUE-cli使用
    2017/04/09王晨分享课大纲
    CommonJS模块和ES6模块的区别
    css常见布局方式
    从输入 URL 到页面加载完成的过程中都发生了什么
    函数节流与防抖的实现
    JavaScript表单
    jQuery方法实现
    移动端去除横向滚动条
    请假时碰到法定假期,实际请假几天?
  • 原文地址:https://www.cnblogs.com/skylee03/p/9939267.html
Copyright © 2011-2022 走看看