【PAT甲级】1068. Find More Coins (30)

来源:互联网 发布:上海市网络作家协会 编辑:程序博客网 时间:2024/05/17 23:36
#include <stdio.h>#include <algorithm>#include <vector>using namespace std;#define MAX_N 10000#define MAX_M 100bool cmp(int a, int b) {    return a > b;}int main(int argc, char *argv[]) {    int n, m;    scanf("%d %d", &n, &m);    int *w = new int[n + 1];    for (int i = 0; i < n; i++) {        scanf("%d", &w[i]);    }    sort(w, w + n, cmp);    int d[MAX_M + 1];    int set[MAX_N + 1][MAX_M + 1];    for (int i = 0; i < n; i++) {        for (int j = m; j >= w[i]; j--) {            if (d[j] <= d[j - w[i]] + w[i]) {                d[j] = d[j - w[i]] + w[i];                set[i][j] = 1;            }        }    }    if (d[m] < m) printf("No Solution\n");    else {        vector<int> v;        int i = n - 1;        int j = m;        while (j > 0) {            if (set[i][j] == 1) {                v.push_back(w[i]);                j = j - w[i];            }            i--;        }        for (i = 0; i < v.size(); i++) {            if (i > 0) printf(" ");            printf("%d", v[i]);        }        printf("\n");    }    return 0;}
原创粉丝点击