首页 技术 正文
技术 2022年11月14日
0 收藏 536 点赞 2,936 浏览 585 个字

noip2018   洛谷  P5020 货币系统

关键: 要使m最小,(m,b)中的数不能用(n,a)中的数表示出来

noip2018   洛谷  P5020 货币系统

对于 3  19  10  6

19=10+3+3+3

6=3+3

只有3 和 10 不能被(n,a)中的数表示

所以m=2

只需要计算出存在多少个能被其它数组成的数计算出来就行了。

法一:完全背包

一个数只能被比它小的数字组成而不能被比它大的数字组成。

可以首先对数组排序,然后对于每一个数考虑能不能被它前面的数字所组成。

若x能够被前i个数组成,那么x-a[i]也能被前i个数组成

f[x]表示x能否被组成

则f [ x ] = f [ x ]  |  f [ x – a [ i ] ]

 #include<bits/stdc++.h>
using namespace std;
const int maxn=;
int main()
{
int a[maxn];
int f[maxn];
int t,n;
int ans;
cin>>t;
while(t--){
memset(f,,sizeof(f));
cin>>n;
ans=n;
for(int i=;i<=n;i++)
cin>>a[i];
sort(a+,a+n+);
f[]=; //边界
for(int i=;i<=n;i++)
{
if(f[a[i]])//a[i]能被前面的数表示
{
ans--;
continue;
}
for(int j=a[i];j<=a[n];j++)
f[j]= (f[j]) | (f[j-a[i]]);
}
cout<<ans<<endl;
}
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,000
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,512
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,358
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,141
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,771
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,849