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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步