记录编号 |
318915 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[Vijos 1071] 新年趣事之打牌 |
最终得分 |
100 |
用户昵称 |
LOSER |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.003 s |
提交时间 |
2016-10-10 07:09:25 |
内存使用 |
1.65 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
#define maxn 100010
int m,n,pre[maxn],Ans[maxn],val[maxn];
bool f[maxn],flag[maxn];
void Print(int x){
if(!x)return;
//getchar(); getchar();
//printf("%d\n",x);
Ans[++Ans[0]]=pre[x];
Print(x-val[pre[x]]);
}
int main(){
freopen("bagb.in","r",stdin); freopen("bagb.out","w",stdout);
f[0]=1;
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++){
int x; scanf("%d",&x); val[i]=x;
for(int j=m;j>=x;j--){
if(f[j-x]){
if(!pre[j]){
pre[j]=i; f[j]=1;
}
else{
if(j==m){
printf("-1\n"); return 0;
}
}
}
}
}
if(!f[m]){printf("0"); return 0;}
//printf("%d\n",pre[100]);
Print(m);
sort(Ans+1,Ans+Ans[0]+1);
for(int i=1;i<=Ans[0];i++){
//printf("%d ",Ans[i]);
flag[Ans[i]]=1;
}
for(int i=1;i<=n;i++){
if(!flag[i])printf("%d ",i);
}
return 0;
}