题解 | #考试策略#

考试策略

http://www.nowcoder.com/practice/a1792d443f914f2b928d2a157cd7900d

当成特殊的背包问题,用动态规划的方法。 核心:dp[x]表示在考试时间剩下x分钟时,能获得的最高分数。 两层循环,外层遍历物品(即本题中的考试题目,完整做完一题和部分做题视为同一个物品的两种价格和价值),内层循环遍历剩余时间。

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

int main(){
    int n;
    cin>>n;
    int p[n+1],a[n+1],q[n+1],b[n+1];
    int total=120;
    p[0]=a[0]=q[0]=b[0]=0;
    for(int i=1;i<=n;i++){
        int temp,tema,temq,temb;
        cin>>temp>>tema>>temq>>temb;
        p[i]=temp;
        a[i]=tema;
        q[i]=temq;
        b[i]=temb;
    }
    vector<int> dp(total+1, 0); //dp[x]指在不超过x元的情况下最多能花多少钱
    for(int i = 1; i <= n; i++) //顺序遍历物品
    {
        for(int j = total; j >= 1; j--) //倒序遍历背包容量
        {
            if(j >= p[i])
            {
                dp[j] = max(dp[j], dp[j - p[i]] + a[i]);
            }
            if(j>=q[i])
            {
                dp[j] = max(dp[j], dp[j - q[i]] + b[i]);
            }
        }
            
    }
    cout << dp[total] << endl;
    return 0;
}
全部评论

相关推荐

05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
点赞 评论 收藏
分享
每晚夜里独自颤抖:要求太多的没必要理
点赞 评论 收藏
分享
06-23 17:45
门头沟学院 Java
里面的项目啥的真的有用吗?&nbsp;这些人是割韭菜吗?
HellowordX:很简单,如果你有自己稳定的学习路线和获取知识的方式就没必要,如果你啥都不懂的小白或者里边有你感兴趣的知识,我觉得挺值,我也经常为知识付费,因为时间精力有限,很多东西我不可能自己重复造轮子
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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