#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;
}
SDUTOJ 3358 - 高数Umaru系列(9)——哈士奇
该代码实现了一个动态规划算法,解决了一个在给定金钱限制下,购买多只狗以最大化萌值的问题。每只狗有价格和萌值,通过遍历所有可能的购买组合,找到最优解。算法首先初始化一个二维数组表示在考虑不同数量的狗和不同金额时的最优解,然后通过比较购买和不购买当前狗的情况,更新最优解。最后输出在考虑所有狗和所有金额时的最大萌值。
摘要由CSDN通过智能技术生成