zoukankan      html  css  js  c++  java
  • Luogu P5020 货币系统

    Luogu P5020 货币系统

    先把$a$数组排一下序。
    从最小的数开始选,显然最小这个数必须选,然后利用完全背包的思想,从$a_i$到最大值筛选一遍,将可以组成的打上标记。
    在判断后面的数字时,如果已经被标记过了,就不再选,没有被标记过就标记一下,再筛选一次数(即再做一次完全背包)。

    #include<bits/stdc++.h>
    #define N 110
    #define A 25010
    
    using namespace std;
    
    int t,n,ans,mmax;
    int a[N];
    bool vis[A];
    
    void Init() {
    	mmax=0;
    	ans=0;
    	memset(vis,0,sizeof(vis));
    	return;
    }
    
    void Read() {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++) {
    		scanf("%d",&a[i]);
    		mmax=max(mmax,a[i]);
    	}
    	return;
    }
    
    void Backpack() {
    	sort(a+1,a+n+1);
    	for(int i=1;i<=n;i++) {
    		if(vis[a[i]]) {
    			continue;
    		}
    		ans++;
    		vis[a[i]]=1;
    		for(int j=a[i];j<=mmax;j++) {
    			if(vis[j-a[i]]) {
    				vis[j]=1;
    			}
    		}
    	}
    	return;
    }
    
    void Print() {
    	printf("%d
    ",ans);
    	return;
    }
    
    int main()
    {
    	scanf("%d",&t);
    	for(int i=1;i<=t;i++) {
    		Init();
    		Read();
    		Backpack();
    		Print();
    	}
    	return 0;
    }
    
  • 相关阅读:
    前端 JavaScript&Dom
    前端 css续
    前端 初级篇(CSS)
    前端 初级篇(HTML)
    堡垒机
    Python操作RabbitMQ
    常用到代码片段
    关于文件上传功能的思考
    JS正则表达式将url转成json格式
    一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
  • 原文地址:https://www.cnblogs.com/luoshui-tianyi/p/11624721.html
Copyright © 2011-2022 走看看