C. Dawn-K’s water(The Preliminary Contest for ICPC Asia Shenyang 2019)

输入样例
输入:
3 3
2 1
3 1
1 1
3 5
2 3
1 2
3 3
输出:
3 3
3 6
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MaxSize 50010
#define inf 0x3f3f3f3f
using namespace std;
int n, cap;
struct a{
int val;
int wei;
double judge;
}items[MaxSize];
int dp[MaxSize];
int main() {
while (scanf("%d%d", &n, &cap) == 2){
memset(dp, inf, sizeof(dp));
dp[0] = 0;
int maxwei = 0;
for (int i = 1; i <= n; i++){
scanf("%d%d", &items[i].val, &items[i].wei);
if (items[i].wei > maxwei) maxwei = items[i].wei;
}
for (int i = 1; i <= n; i++)
for (int j = items[i].wei; j <= cap + maxwei; j++)
dp[j] = min(dp[j], dp[j-items[i].wei]+items[i].val);
int a = inf, j = 0;
for (int i = cap; i <= cap + maxwei; i++){
if (dp[i] <= a){
a = dp[i];
j = i;
}
}
printf("%d %d\n", a, j);
}
return 0;
}