如果一种货币可以被其他货币表示,那么这个货币就没有卵用
#include<bits/stdc++.h>
using namespace std;
int n;
int a[105];
int f[25005];
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>n;
memset(f,0,sizeof(f));
int ans=0;
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(!f[a[i]])
{
f[a[i]]=1;
ans++;
for(int j=a[i];j<=25000;j++)
f[j]=f[j]|f[j-a[i]];
}
cout<<ans<<endl;
}
return 0;
}
f[j]=f[j]|f[j-a[i]];大佬这个代码怎么理解?
我觉得这样理解,就是:
f[x] 代表 金额x 是否有存在的意义。(如果被其他金额组合成,那么就没啥意义了)
1. f[j]代表当前的金额的是否有存在意思
2. f[j-a[i]] 代表金额j-a[i] 是否可以组合成功。如果成功了那么,j也能组合成功了。
是的
我的理解是,最后是0就变为1不是就不变变则+1
应该不是+=吧,感觉有区别
f[j]=f[j]|f[j-a[i]];大佬这个代码怎么理解
请问你知道这么怎么理解了吗 就是这个发 f[j]=f[j]|f[j-a[i]];