比赛 201712练习 评测结果 AAAAAAAAAA
题目名称 硬币问题 最终得分 100
用户昵称 烟雨 运行时间 0.016 s
代码语言 C++ 内存使用 0.36 MiB
提交时间 2017-12-25 18:21:55
显示代码纯文本
#include<cstdio>
using namespace std;
bool flags;char ch;
int read(int &x)
{flags=false;
	while(ch=getchar(),ch<48 || 57<ch)if(ch=='-')flags=true;
	x=ch^'0';
	while(ch=getchar(),48<=ch && ch<=57)x=x*10+(ch^'0');
	if(flags)return -x;
	else return x;
}
int n,m,ao[100001],a[100001],b[100001],bo[100001],s[101];
int LL()
{
	freopen ("kouka.in","r",stdin);
	freopen ("kouka.out","w",stdout);
	read(n);read(m);
	for(int i=1;i<=n;i++)read(s[i]);
	for(int i=1;i<=m;i++)
	{
		a[i]=-100001;
		b[i]=100001;
	}
	for(int i=1;i<=m;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(i<s[j])continue;
			if(a[i]<a[i-s[j]]+1)
			{
				a[i]=a[i-s[j]]+1;
				ao[i]=j;
			}
			if(b[i]>b[i-s[j]]+1)
			{
				b[i]=b[i-s[j]]+1;
				bo[i]=j;
			}
		}
	}
	printf("%d %d\n",b[m],a[m]);
	int n=m;
	while(n>0)
	{
		printf("%d ",bo[n]);
		n=n-s[bo[n]];
	}
	printf("\n");
	while(m>0)
	{
		printf("%d ",ao[m]);
		m=m-s[ao[m]];
	}
	/**/
	return 0;
}
int work=LL();
int main(){;}