题目描述
收服小精灵需要两个代价,精灵球和体力值,问满足以上数量限制下的能收服的物品数?
基本分析
- 相比于常规01背包,变化在哪?限制条件是独立的两个维度
- 最大数量下对应的最小的体力怎么找?满足值相等的条件下,让k尽量的小
代码
| #include <iostream> |
| #include <algorithm> |
| |
| using namespace std; |
| |
| int f[1010][510]; |
| |
| int n, V1, V2; |
| |
| int main() |
| { |
| scanf("%d%d%d", &V1, &V2, &n); |
| for (int i = 1; i <= n; i ++) |
| { |
| int v1, v2; |
| scanf("%d%d", &v1, &v2); |
| for (int j = V1; j >= v1; j --) |
| for (int k = V2-1; k >= v2; k--) |
| f[j][k] = max(f[j][k], f[j-v1][k-v2] + 1); |
| } |
| printf("%d ", f[V1][V2-1]); |
| int k = V2 - 1; |
| while (k > 0 & f[V1][k - 1] == f[V1][V2 - 1]) k --; |
| printf("%d\n", V2 - k); |
| |
| return 0; |
| } |
总结
- 体力值不能为空,所以遍历的时候,k从V2-1开始,取最大值的时候,也是f[V1][V2-1]
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战