vijos1071【动态规划】
来源:互联网 发布:ios数据存储方式 编辑:程序博客网 时间:2024/04/30 20:09
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define forn(i,n) for(int i=0;i<(n);i++)#define for1(i,n) for(int i=1;i<=(n);i++)int n , m;int f[100010] , c[101];bool vis[101];void ZeroOnePack(int cost) { for(int i=m;i>=cost;i--) if(f[i-cost]) f[i] += f[i-cost];}void read() { scanf("%d%d",&m,&n); for1(i,n) scanf("%d",&c[i]);}void dp() { f[0] = 1; int mm = m; for1(i,n) ZeroOnePack(c[i]); if(!f[m]) { puts("0"); return; } if(f[m] > 1) { puts("-1"); return; } int flag = 0; for1(i,n) { if(m>=c[i] && f[m - c[i]]) { m -= c[i]; vis[i] = 1; if(m == 0) break; } } for1(i,n) { if(!vis[i]) { if(flag) printf(" "); else flag = 1; printf("%d",i); } } printf("\n");}int main() { read(); dp(); return 0;}