题解 | #点菜问题#

点菜问题

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

//经典0-1背包,采用动态规划的做法
#include "stdio.h"
#include "algorithm"
using namespace std;

int main(){
    int C,N;
    int price[110];
    int credit[110];
    int dp[110][1010];
    while (scanf("%d%d",&C,&N)!=EOF){
        for (int i = 1; i <= N; ++i) {
            scanf("%d%d",price+i,credit+i);
        }
        for (int i = 0; i <= N; ++i) {//i为菜品的下标
            for (int j = 0; j <= C; ++j) {//j为weight(剩下的钱)
                if (i == 0 || j == 0){//没有菜品可选或没钱了
                    dp[i][j] = 0;
                    continue;
                }
                if (j < price[i])
                    dp[i][j] = dp[i-1][j];//菜太贵,超过了weight,没法买
                else
                    dp[i][j] = max(dp[i-1][j-price[i]]+credit[i],dp[i-1][j]);//买此菜品与不买此
                                                                             //菜品中选择评分高的
            }
        }
        printf("%d\n",dp[N][C]);
    }
}

全部评论

相关推荐

专业嗎喽:个人信息名字太大,合到电话邮箱那一栏就行,有党员写过党,剩下其他全删,站空太大了 把实习经历丰富,放最前面,然后是个人评价,技能之类的,然后是学校信息。项目经历最后面,可以就选一个自己擅长的。 现在是学校不是92就扣分的,没必要放前面。 然后现在看重实习经历>竞赛经历(校园经历)>课程项目经历
点赞 评论 收藏
分享
12-10 22:48
武汉大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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