比赛 |
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(){;}