当前位置: 首页 > news >正文

Qwen模型 LeetCode 2585. 获得分数的方法数 Java实现

哇!这道2585题超经典的,完全就是**完全背包问题**的变种呢!让我来给你详细讲讲我的解法思路~

题目大意是:给定不同类型的题目,每种题目有数量限制、需要的时间和能获得的分数,问恰好用完`target`时间能获得的最大分数有多少种方法。

```java
public class Solution {
public int waysToReachTarget(int target, int[][] types) {
final int MOD = 1000000007;
int n = types.length;

// dp[i][j] 表示使用前i种题目,恰好花费j时间的方法数
int[][] dp = new int[n + 1][target + 1];

// 初始化:花费0时间的方法数为1(什么都不选)
for (int i = 0; i <= n; i++) {
dp[i][0] = 1;
}

// 动态规划填表
for (int i = 1; i <= n; i++) {
int count = types[i - 1][0]; // 第i-1种题目的数量
int mark = types[i - 1][1]; // 第i-1种题目的分数(也就是时间消耗)

for (int j = 0; j <= target; j++) {
// 不选择第i-1种题目的情况
dp[i][j] = dp[i - 1][j];

// 选择第i-1种题目的情况(可以选1个、2个...count个)
for (int k = 1; k <= count; k++) {
int timeNeeded = k * mark;
if (timeNeeded > j) break;

dp[i][j] = (dp[i][j] + dp[i - 1][j - timeNeeded]) % MOD;
}
}
}

return dp[n][target];
}
}
```

不过等等!这个三重循环的版本虽然正确,但对于大数据可能会有点慢。让我给你一个**优化版**,用**前缀和优化**把时间复杂度降下来:

```java
public class Solution {
public int waysToReachTarget(int target, int[][] types) {
final int MOD = 1000000007;

// 滚动数组优化空间
int[] dp = new int[target + 1];
dp[0] = 1; // 基础情况

for (int[] type : types) {
int count = type[0];
int mark = type[1];

// 从后往前更新,避免重复计算
int[] newDp = dp.clone();

for (int j = mark; j <= target; j++) {
// 累加选择1个、2个...的情况
for (int k = 1; k <= count && k * mark <= j; k++) {
newDp[j] = (newDp[j] + dp[j - k * mark]) % MOD;
}
}

dp = newDp;
}

return dp[target];
}
}
```

**让我用个生动的例子解释一下**:

想象你在玩一个游戏,有不同类型的道具:
- 类型1:最多买3个,每个花费2金币,获得2分
- 类型2:最多买2个,每个花费3金币,获得3分

你要恰好花完10金币,问有多少种购买方案?

这就像是在超市购物,每种商品有库存限制,你要刚好花完钱包里的钱!

**核心思想**:
- 🎒 **完全背包的变种**:每种物品有数量限制(多重背包)
- 🔄 **状态转移**:对于每种题目类型,考虑选0个、1个、2个...的情况
- 🛡️ **取模运算**:防止整数溢出

**时间复杂度**:O(n × target × maxCount)
**空间复杂度**:O(target) (滚动数组优化后)

其实这道题还可以用**生成函数**的思想来理解,每种题目类型对应一个多项式 `(1 + x^mark + x^(2*mark) + ... + x^(count*mark))`,最终答案就是所有多项式相乘后 `x^target` 的系数!

你觉得这个解法怎么样?要不要我再给你讲讲其他背包问题的变种?比如0-1背包、完全背包的区别?😄

http://www.jsqmd.com/news/874625/

相关文章:

  • B站AI助手初体验:除了查视频梗,它真的能帮你写Python代码吗?
  • 2026年腾讯云OpenClaw/Hermes Agent配置Token Plan安装保姆级分享
  • 2026 上海 GEO 优化公司测评:五大实力派机构,全意图 GEO 助力沪上企业领跑 AI 赛道 - GEO优化
  • 雷电模拟器绿色版渗透风险与可信环境加固指南
  • DOTA1.5数据集处理实战:用Python脚本搞定大图切割与YOLO/VOC格式转换
  • C51编译器函数指针处理机制解析
  • 2026年阿里云OpenClaw/Hermes Agent配置Token Plan部署保姆级教程
  • Unity模块化资产体系:边界清晰、契约稳定、可嵌入生产管线
  • 别再买贵的了!用合宙Air32F103CBT6自制四合一烧录器(ST-LINK/DAP/J-LINK-OB全兼容)
  • 电脑‘假关机’真烦人!深入聊聊Windows电源管理里的‘快速启动’到底是个啥
  • 上海GEO公司哪家好:在竞争密度最高的市场中,用AI推荐突破增长天花板 - GEO优化
  • 微信小程序抓包实战:Proxifier+Charles精准流量捕获与HTTPS解密
  • 别再纠结选哪个了!用Python实战ARIMA和LSTM预测气温,看谁更准(附完整代码)
  • AI金融系统性风险:算法同质化与认知依赖的致命螺旋
  • Godot PCK文件解包:原理、工具与工程化实践指南
  • 01-系统技术架构师必备——软件架构设计基础与核心概念
  • 国产系统(UOS/麒麟/方德)截图工具终极指南:从内置工具到第三方替代方案全解析
  • 2026崇明区优质保洁服务推荐榜可靠之选:浦东新区保安公司/浦东新区保洁公司/网络推广/金山区保安公司/闵行区保安公司/选择指南 - 优质品牌商家
  • 2026年5月新发布:浙江陶棉纺织,全棉绉布定制化生产引领者 - 2026年企业推荐榜
  • 遥感图像因果推断:多尺度表征优化提升异质性处理效应检测
  • 2026年诚信的滁州本土装修品质保障公司 - 行业平台推荐
  • 02-系统技术架构师必备——五大架构风格与模式深度解析
  • 2026固化地坪龟裂纹修复应用白皮书市政场地剖析:固化地坪染色剂、固化地坪龟裂纹修复剂、复合型空鼓灌浆料、快速改色地坪漆选择指南 - 优质品牌商家
  • 空间计算与可解释AI融合:革新生物医学决策支持系统
  • Unity安装包瘦身实战:从2.3GB到680MB的工程化治理
  • 北京GEO服务市场格局洞察:技术底蕴与合规能力的双重考验 - GEO优化
  • 【体育科技决策者必读】:为什么92%的传统体育组织在AI Agent选型上踩了这4个致命误区?
  • Unity中型项目插件整合实战:地形、地牢、卡通渲染与性能优化
  • Vision Mamba边缘硬件加速器设计:从线性SSM原理到端到端架构实现
  • 2026年当下河北四氟板厂家深度:谁在领跑耐腐蚀密封市场? - 2026年企业推荐榜