题解 | #采药#

采药

https://www.nowcoder.com/practice/d7c03b114f0541dd8e32ce9987326c16

#include <iostream>
#include <algorithm>
using namespace std;

//dp[item][time] = value
int dp[105][2000];
int herdTime[105]; //采草药的时间
int herdValue[105]; //采草药的价值

int main() {
    int T, M;
    while (scanf("%d%d", &T, &M) != EOF) { // 注意 while 处理多个 case
        //由于后面的dp[0][0] 是为0的,所以从1开始方便编程
        for(int i = 1; i <= M; i++){ 
            scanf("%d%d", &herdTime[i], &herdValue[i]);
        }
        
        for(int item = 0; item <= M; item++){
            for(int time = 0; time <= T; time++){
                if(0 == item || 0 == time){
                    dp[item][time] = 0;
                    continue;
                }
                if(time - herdTime[item] < 0){ //时间不够采摘,就不采摘了,拿上一次的结果
                    dp[item][time] = dp[item - 1][time];
                }else{ //时间够采摘,就看看到底要不要采,把 采摘的情况 和 不采摘的情况取一个最大值
                     dp[item][time] = max(dp[item - 1][time], herdValue[item] + dp[item - 1][time - herdTime[item]]);
                }
            }
        }
        printf("%d\n", dp[M][T]);
    }
}
// 64 位输出请用 printf("%lld")

我觉得这里dp的意思是dp[i][j] 目前可以选的种类是0 - i, 此时的空间还有 j

全部评论

相关推荐

搞机墨镜猫:生产实习放项目下面,简化一点,如果有更好的东西就可以直接替换掉,比如你说你拆过他们的伺服电机很了解结构,可以照着画一下写成项目 项目看看能不能再找一个课设之类的包装一下(别写减速器),两个项目比较好,把项目后面的三位建模几个字去掉(这样会觉得有实物)
机械人,你的秋招第一份简...
点赞 评论 收藏
分享
09-15 18:37
已编辑
门头沟学院 后端工程师
让校招回归公平好吗。各大公司学习一下
秋招路在何方:互娱和雷火的笔试是确实是我见过最严格的,支持
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务