题解 | 采药

#include <bits/stdc++.h>
#include <cstring>
using namespace std;

int main() {
    int m, n;
    while (cin >> m >> n) {
        int dp[n + 1][m + 1];
        memset(dp, 0, sizeof(dp));
        for (int i = 1; i <= n; i++) {
            int x, y;
            cin >> x >> y;
            for (int j = 0; j <= m; j++) {
                if (x > j)dp[i][j] = dp[i - 1][j];
                else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - x] + y);
            }
        }
        cout << dp[n][m] << endl;
    }

}

非常经典的01背包问题,这个问题我们已经在专栏里进行了彻底的拆解和分享

全部评论

相关推荐

02-16 13:52
门头沟学院 Java
给🐭🐭个面试机会吧:嘿,mvbatis
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务