SDUTOJ 3358 - 高数Umaru系列(9)——哈士奇

该代码实现了一个动态规划算法,解决了一个在给定金钱限制下,购买多只狗以最大化萌值的问题。每只狗有价格和萌值,通过遍历所有可能的购买组合,找到最优解。算法首先初始化一个二维数组表示在考虑不同数量的狗和不同金额时的最优解,然后通过比较购买和不购买当前狗的情况,更新最优解。最后输出在考虑所有狗和所有金额时的最大萌值。
摘要由CSDN通过智能技术生成
#include<bits/stdc++.h>
using namespace std;

int main()
{
    // n为狗数,x为钱数,p为每只狗的价格,m为每只狗的萌值
    int n, x, p, m;
    while(cin>>n>>x){
        int dp[110][1010] = {0};
        // 当第i条狗被考虑在内时的最优解
        for (int i = 1; i <= n; i++){
            cin>>p>>m;
            // 当考虑使用j元时的最优解
            for (int j = 1; j <= x; j++){
                // 当前使用的钱j,不足以购买狗i
                // 1. i==1,初始化考虑一条狗时的最优解
                // 2. i!=1,则继承只考虑i-1条狗的最优解
                dp[i][j] = (i==1?0:dp[i-1][j]);
                // 若当前使用的钱j足以购买狗i
                // 则考虑比较不买狗i时的最优解和购买狗i时的最优解
                if (j>=p){
                    // 注意此时购买狗i的最优解基于去掉所费价格后的最优解
                    dp[i][j] = max(dp[i-1][j], dp[i-1][j-p]+m);
                }
            }
        }
        // 输出考虑n条狗,且考虑使用x元时的最优解
        cout<<dp[n][x]<<endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值