Skip to content

Commit c37bc2b

Browse files
committed
20210816-13
1 parent a87e5a9 commit c37bc2b

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

12865

49.1 KB
Binary file not shown.

12865.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#include <cstdio>
2+
#include <algorithm>
3+
int dp[101][100010];
4+
5+
int main(){
6+
int n, k;
7+
int w[110];
8+
int v[110];
9+
10+
scanf("%d%d", &n, &k);
11+
for(int i=1;i<=n;i++) scanf("%d%d", &w[i], &v[i]);
12+
13+
// dp[i][j] : i번째 물건까지 고려했을 때 j 무게의 가방이 됐을 떄의 총 가치
14+
// 그렇다면 가방에 i번째 물건을 넣는 경우와 안 넣는 경우가 있다.
15+
// 일단 i번째 물건이 들어가면 무조건 가방 무게 j는 i번째 물건보다 커지게 되어 있다. (j>=w[i]). 따라서 들어가면 j>=w[i]이고, 안 들어가면 j<w[i]이다.
16+
// 그런데 이번 물건을 아예 안 넣는게 더 이득일 경우가 있다. j>=w[i]일때도. 그 세 가지 경우만 고려해주면 문제를 풀 수 있다.
17+
for(int i=1;i<=n;i++){
18+
for(int j=1;j<=k;j++){
19+
// j>=w[i]는 만들고자 하는 가방 무게가 일단 지금 넣으려는 것보다는 작아야 한다는 이야기이다.
20+
if(j>=w[i]) dp[i][j]=std::max(dp[i-1][j], dp[i-1][j-w[i]]+v[i]);
21+
else dp[i][j]=dp[i-1][j];
22+
}
23+
}
24+
printf("%d\n", dp[n][k]);
25+
26+
}

0 commit comments

Comments
 (0)