1 条题解
-
0
#include<bits/stdc++.h> using namespace std; // [1] 全局变量:t代表总采摘时间,m代表灵芝的种类数 int t,m; int main(){ // [2] 输入总时间t和灵芝种类数m cin>>t>>m; // [3] 定义数组存储每种灵芝的采摘时间与价值,下标从1开始便于后续循环处理 vector<int> time(m+1); vector<int> value(m+1); // [4] 循环读取m种灵芝的时间和价值 for(int i=1;i<=m;i++) { cin>>time[i]>>value[i]; // 输入第i种灵芝的采摘时间和对应价值 } // [5] dp数组:dp[j]表示在时间j内可获得的最大价值,初始默认值为0 vector<long long> dp(t+1); // [6] 完全背包问题:遍历每一种灵芝 for(int i=1;i<=m;i++) { // [7] 遍历时间维度,从当前灵芝的采摘时间开始(时间不足时无法采摘该灵芝) for(int j=time[i];j<=t;j++){ // [8] 状态转移:比较“不选当前灵芝”和“选当前灵芝”的价值,取最大值更新dp[j] dp[j]=max(dp[j],dp[j-time[i]]+value[i]); } } // [9] 输出总时间t内可获得的最大价值 cout<<dp[t]; return 0; }
- 1
信息
- ID
- 1335
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者