您的位置:首页 > 其它

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

2017-06-21 17:18 330 查看
#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;
#define MAX_N 10000
#define MAX_M 100
bool 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: