Acwing 532. 货币系统

直觉上B集合是A集合的非空子集,也就是说可以从A中舍弃一些元素,这些元素能被其他元素表示
就转化成了多重背包问题
#include<bits/stdc++.h>
using namespace std;
#define fr first
#define se second
typedef pair<int, int> PII;
typedef long long LL;
typedef unsigned long long ULL;
const int INF = 0X3f3f3f3f, N = 100 + 10, M = 2e5 + 10, MOD = 1e9 + 10;
int w[N];
void work() {
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>w[i];
sort(w+1,w+n+1);
int res=0;
vector<int> f(w[n]+1);
f[0]=1;
for(int i=1;i<=n;i++){
if(f[w[i]]) continue;
// for(int j=1;j<i;j++) 1
for(int k=w[i];k<=w[n];k++)
f[k]+=f[k-w[i]];
res++;
}
cout<<res<<endl;
}
signed main() {
int test;
cin>>test;
while(test--){
work();
}
return 0;
}

本文作者:xhy666

本文链接:https://www.cnblogs.com/xhy666/p/16413884.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   xhy666  阅读(8)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起