描述:题意:输入两个数n,m和m个数,计算一堆数的和,寻找最接近n并且小于n的数,找到后把凑成这个和的数全部输出即可
#include <cstdio>
#include <cstring>
struct Cd
{
int flag;
int pos;
};
Cd count[50010];
void show(int x)
{
if(x) show(count[x].pos);
if(x)printf("%d ",count[x].flag);
}
int main()
{
int n,m,sum,p,v,arr[25];
// freopen("a.txt","r",stdin);
while(scanf("%d",&n)!=EOF)
{
scanf("%d",&m);
for(int i=1;i<=n;i++) count[i].flag=count[i].pos=0;
sum=0;
for(int i=0; i<m; i++)
{
scanf("%d",&arr[i]);
sum+=arr[i];
}
if(sum<=n)
{
for(int i=0; i<m; i++) printf("%d ",arr[i]);
printf("sum:%d\n",sum);
}
else
{
v=0;
count[0].flag=1;
for(int i=0; i<m; i++)
{
for(int j=n-1; j>=0; j--)
if(count[j].flag)
{
p=j+arr[i];
if(p<=n&&!count[p].flag)
{
if(p>v) v=p;
count[p].flag=arr[i];
count[p].pos=j;
if(p==n) break;
}
}
if(p==n) break;
}
show(v);
printf("sum:%d\n",v);
}
}
return 0;
}
624 - CD
最新推荐文章于 2018-01-29 15:28:34 发布