Skip to content

Commit 0572821

Browse files
committedOct 17, 2018
AC
1 parent 0423a73 commit 0572821

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#include <cstdio>
2+
#include <algorithm>
3+
using namespace std;
4+
int cmp(const int &a, const int &b) { return a > b;}
5+
6+
int main(){
7+
int N, M, f[10001];
8+
scanf("%d%d", &N, &M);
9+
for(int i = 1; i <=N; ++i)
10+
scanf("%d", &f[i]);
11+
sort(f+1, f+N+1, cmp);
12+
int dp[M+1] = {0};
13+
int choice[N+1][M+1];
14+
15+
for(int i = 1; i <= N; ++i){
16+
for(int v = M; v >= f[i]; --v){
17+
if(dp[v] <= dp[v-f[i]] + f[i]){
18+
dp[v] = dp[v-f[i]] + f[i];
19+
choice[i][v] = 1;
20+
}
21+
else
22+
choice[i][v] = 0;
23+
}
24+
}
25+
if(dp[M] != M) printf("No Solution");
26+
else{
27+
int flag[N+1] = {0};
28+
int k = N, num = 0, v = M;
29+
while(k >= 0){
30+
if(choice[k][v] == 1){
31+
flag[k] = 1;
32+
v -= f[k];
33+
num++;
34+
}
35+
k--;
36+
}
37+
for(int i = N; i >= 1; --i){
38+
if(flag[i]){
39+
printf("%d", f[i]);
40+
--num;
41+
if(num > 0) printf(" ");
42+
}
43+
}
44+
}
45+
return 0;
46+
}

0 commit comments

Comments
 (0)
Please sign in to comment.