记录编号 383828 评测结果 RRRRRRRR
题目名称 旅行计划 最终得分 0
用户昵称 GravatarJustWB 是否通过 未通过
代码语言 C++ 运行时间 0.006 s
提交时间 2017-03-16 16:18:49 内存使用 1.84 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,S;
int N[101],D[100010],X[100010],jld[100010],jlx[100010];
void out(int all,bool pan)
{
	if(pan)
	{
	while(all)
	{
		printf("%d ",jld[all]);
		all-=N[jld[all]];
	}	
	printf("\n");return;
	}
	else
	{
		while(all)
		{
			printf("%d ",jlx[all]);
			all-=N[jlx[all]];
		}
		printf("\n");return;
	}
}
int main()
{
	freopen("kouka.in","r",stdin);
	freopen("kouka.out","w",stdout);
	scanf("%d%d",&n,&S);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&N[i]);
	}
	memset(D,-0x7f,sizeof(D));
	memset(X,0x7f,sizeof(X));
	D[0]=X[0]=0;
	for(int i=1;i<=S;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(i>=N[j])
			{
				if(D[i]>D[i-N[j]]+1)
				{
					D[i]=D[i-N[jld[i]=j]]+1;
				}
				if(X[i]<X[i-N[j]]+1)
				{
					X[i]=X[i-N[jlx[i]=j]]+1;
				}
			}

		}
	}
	printf("%d %d\n",D[S],X[S]);
	out(S,1);out(S,0);
	return 0;
}