ACM 训练日志记录 · 思考 · 成长 提交 / 修改记录
王梓豪 / 题目列表训练档案
导出

P1048 采药

来源:洛谷 ★ 1000

本题活力0.21按难度、完成结果与训练证据估算

算法如山行则将至

题目描述

给定时间T和M种草药,每种有时间和价值,求总价值最大。

代码

#include <bits/stdc++.h>
using namespace std;
struct grass
{
    int valume=0;
    int value=0;
};
int main()
{
    int tt,m;
    cin>>tt>>m;
    vector<int> t(m);
    vector<int> v(m);
    for(int i=0;i<m;i++)
    {
    cin>>t[i]>>v[i];
    }
    vector<vector<grass> > dp(m,vector<grass> (tt));
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<tt;j++)
        {
            if(i==0)
            {
                if(j>=t[i]) {dp[i][j].value=v[i];dp[i][j].valume=t[i];}
            }
            else
            {
                    dp[i][j].value=max(dp[i-1][j].value,dp[i-1][j-t[i]].value+t[i]);
                    dp[i][j].valume=dp[i-1][j].value>dp[i-1][j-t[i]].value+v[i]?dp[i-1][j].valume:dp[i-1][j-t[i]].valume+t[i];
            }
        }
    }
    cout<<dp[m-1][tt-1].value;
}