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

    gate

    我太菜了,看了标签是背包还不知道是怎么回事qaq

    看了下题解,意识到这是个类似素数筛的东西。

    感性理解可以发现,原货币系统中能被表示出来的是可以不选的,剩下的就是要选的。所以最小的一定要选,把原货币系统从小到大排序。

    枚举原货币系统中的货币a[i],枚举金额j(a[i]+1<j<a[n])

    如果j-a[i]可以表示,那么通过a[i],j就也可以表示了。用这种方式判断。

    核心代码

    for(int i = 1; i <= n; i++) {
        if(vis[a[i]]) continue;
        vis[a[i]] = true;
        ans++;
        for(int j = a[i]+1; j <= a[n]; j++)
            if(vis[j-a[i]]) vis[j] = true;
    }

    唉——代码好短

    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #include<cstring>
    #define MogeKo qwq
    #include<algorithm>
    using namespace std;
    
    const int maxn = 30005;
    int t,n,a[maxn],vis[maxn],ans;
    
    void init() {
        ans = 0;
        memset(a,0,sizeof(a));
        memset(vis,0,sizeof(vis));
    }
    
    int main() {
        scanf("%d",&t);
        while(t--) {
            init();
            scanf("%d",&n);
            for(int i = 1; i <= n; i++)
                scanf("%d",&a[i]);
            sort(a+1,a+n+1);
            for(int i = 1; i <= n; i++) {
                if(vis[a[i]]) continue;
                vis[a[i]] = true;
                ans++;
                for(int j = a[i]+1; j <= a[n]; j++)
                    if(vis[j-a[i]]) vis[j] = true;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    37.1 net-- udp传输
    37 net 网络编程
    review
    java day02 记录
    36.2 线程生命周期
    36.1 线程锁
    36 Thread 多线程
    35 编码 ASCII Unicode UTF-8 ,字符串的编码、io流的编码
    34.6 Properties(k,v存储) 和io流结合使用
    今日学习总结
  • 原文地址:https://www.cnblogs.com/mogeko/p/11636936.html
Copyright © 2011-2022 走看看