题解 | #点菜问题#优化成一维

点菜问题

https://www.nowcoder.com/practice/b44f5be34a9143aa84c478d79401e22a

#include <iostream>
#include <cstdio>
using namespace std;

int weight[2000];
int value[2000];
int dp[2000]; //dp[j]容量还有j, 当前价值为dp[j]


int main() {
    int n, m; //n件物品, m为总容量
    while (scanf("%d%d", &m, &n) != EOF) {
        for (int i = 1; i <= n; i++) { //从1开始
            scanf("%d%d", &weight[i], &value[i]);
        }
        for (int i = 0; i <= m;
                i++) { //当啥都不选的时候,就算有再多的容量也没用
            dp[i] = 0;
        }
        for (int i = 1; i <= n; i++) { 
            for (int j = m; j >= weight[i]; j--) {
                dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
            }
        }
        printf("%d\n", dp[m]);
    }
}

全部评论

相关推荐

05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
06-04 09:27
门头沟学院 Java
点赞 评论 收藏
分享
06-25 16:00
武汉大学 Java
工科研究生底薪工资就开3k啊??
机械打工仔:写文章提成的岗位工资低,你怪工科?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务