硬币题解 大意开门:有一个数x,有n个硬币,要求这n个硬币中选几个硬币和为x,这些组合中每次都重复用的数是多少 代码飞来:
#include<cstdio> #include<cstring> using namespace std; int f[11000],a[210],b[210]; int main() { int n,m,ans=0; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)scanf("%d",&a[i]); for(int t=1;t<=n;t++) { memset(f,0,sizeof(f));f[0]=1; for(int i=1;i<=n;i++) { if(i!=t) { for(int j=m;j>=a[i];j--)f[j]+=f[j-a[i]];//这是求除去t号硬币,剩下的硬币和为m的组合方案 } } if(f[m]==0)
//这里是指除去t号硬币,剩下不能组成m,那么t号硬币肯定必选(因为题目说了至少有一种组合超过x元)
{ b[++ans]=t;//记录编号t } }
printf("%d\n",ans);
for(int i=1;i<ans;i++)printf("%d ",a[b[i]]);
if(ans>0)printf("%d",a[b[ans]]);
printf("\n");
return 0;
}