硬币题解

硬币题解
大意开门:有一个数x,有n个硬币,要求这n个硬币中选几个硬币和为x,这些组合中每次都重复用的数是多少
代码飞来:

include

include

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;
}

猜你喜欢

转载自www.cnblogs.com/candy067/p/11402042.html
今日推荐