44 lines
975 B
C
44 lines
975 B
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
int max(int a, int b) {
|
|
return a>b ? a : b;
|
|
}
|
|
|
|
int main() {
|
|
int N, K;
|
|
scanf("%d %d",&N, &K);
|
|
int** items = (int**)malloc(sizeof(int*)*(N+1));
|
|
int** dp = (int**)malloc(sizeof(int*)*(N+1));
|
|
for(int i=0; i<=N; i++) {
|
|
items[i] = (int*)malloc(sizeof(int)*2);
|
|
if(i==0) {
|
|
items[i][0] = 0;
|
|
items[i][1] = 0;
|
|
}
|
|
else {
|
|
scanf("%d %d",&items[i][0], &items[i][1]);
|
|
}
|
|
|
|
dp[i] = (int*)malloc(sizeof(int)*(K+1));
|
|
for(int j=0; j<=K; j++) dp[i][j] = 0;
|
|
}
|
|
|
|
for(int n=1; n<=N; n++) {
|
|
for(int k=1; k<=K; k++) {
|
|
if (items[n][0] <= k) dp[n][k] = max(dp[n-1][k], dp[n-1][k-items[n][0]] + items[n][1]);
|
|
else dp[n][k] = dp[n-1][k];
|
|
}
|
|
}
|
|
|
|
printf("%d\n",dp[N][K]);
|
|
|
|
for(int i=0; i<=N; i++) {
|
|
free(items[i]);
|
|
free(dp[i]);
|
|
}
|
|
free(items);
|
|
free(dp);
|
|
|
|
return 0;
|
|
} |