1 条题解
-
0
#include<bits/stdc++.h> using namespace std; // [1] 全局变量:t代表总采药时间,m代表草药的数量 int t,m; // [2] 结构体:存储每株草药的采摘时间和对应的价值 struct stu{ int time,value; }arr[1100]; // [3] 结构体数组:存储所有草药的时间和价值信息 int main() { // [4] 输入总采药时间t和草药数量m cin>>t>>m; // [5] 循环读取每株草药的时间和价值,存入结构体数组 for(int i=1;i<=m;i++){ cin>>arr[i].time>>arr[i].value; } // [6] 创建一维动态规划数组dp,dp[j]表示时间j内能获得的最大价值,初始值为0 vector<int> dp(t+1); // [7] 遍历每一株草药(01背包的物品遍历) for(int i=1;i<=m;i++){ // [8] 倒序遍历时间:避免同一株草药被重复选取(01背包空间优化的核心操作) for(int j=t;j>=0;j--){ // [9] 判断当前剩余时间是否足够采摘第i株草药 if(j>=arr[i].time){ // [10] 更新dp[j]:取“不选当前草药的原有价值”和“选当前草药的价值(剩余时间的最大价值+当前草药价值)”中的较大值 dp[j]=max(dp[j],dp[j-arr[i].time]+arr[i].value); } } } // [11] 输出总时间t内可获得的最大草药价值 cout<<dp[t]; return 0; }
- 1
信息
- ID
- 1357
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 2
- 上传者