记录编号 318915 评测结果 AAAAAAAAAA
题目名称 [Vijos 1071] 新年趣事之打牌 最终得分 100
用户昵称 GravatarLOSER 是否通过 通过
代码语言 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;	
}