zoukankan      html  css  js  c++  java
  • POJ 1742 Coins

    多重背包 + 贪心

    本题是一道多重背包问题,但是如果用朴素的多重背包会T,可以考虑二进制拆分,或单调队列优化
    但是本题是一道判定性问题,所以我们有贪心策略,即对于没一种面值来说,选用尽量少的 i 种硬币,
    用 used 数组来记录当前面值所需的 i 种硬币最少是多少

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <cstdlib>
    using namespace std;
    const int MAXN = 100005;
    int n, m, a[105], c[105], used[MAXN];
    bool f[MAXN];
    int main(){
    	while(1) {
    		cin >> n >> m;
    		if(!n || !m) break;
    		memset(f, 0, sizeof(f));
    		f[0] = 1;
    		for(int i = 1; i <= n; i++) cin >> a[i];
    		for(int i = 1; i <= n; i++) cin >> c[i];
    		for(int i = 1; i <= n; i++) {
    			memset(used, 0, sizeof(used));
    			for(int j = a[i]; j <= m; j++) {
    				if(!f[j] && f[j - a[i]] && used[j - a[i]] < c[i]) {
    					f[j] |= f[j - a[i]]; used[j] = used[j - a[i]] + 1;
    				}
    			}
    		}
    		int ans = 0;
    		for(int i = 1;i <= m; i++) if(f[i]) ans++;
    		cout << ans << endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    Document
    Document
    Document
    2.原型和原型链的关系以及查找顺序
    1.面向对象 及 相关知识点
    时间对象 <-> 定时器 <-> 电子时钟 <-> 倒计时效果
    定时器
    let var const 的区别
    ES6 中块的概念
    js中的闭包
  • 原文地址:https://www.cnblogs.com/Mr-WolframsMgcBox/p/8598988.html
Copyright © 2011-2022 走看看