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;}