题解 | 小美打怪

小美打怪

https://www.nowcoder.com/practice/5fb4f77c5f0e41118d16a23112b64ea6

其实这道题的核心就是找出小美能连续打败的怪物最长严格递增序列啦!

我们可以用动态规划(dp)来一步步解决哦~

排序准备喵~

先把所有怪物按照生命力从小到大排序,如果生命力相同,就按攻击力从小到大排。

小科普喵:vector<pair<int,int>>如果用sort函数就是以first升序排序,若相同则以second升序排序喵!

这样之后找“前面严格小于当前怪物”的时候会更方便哦!还可以降低复杂度nya~

然后我们就要设置dp数组了喵!dp[i] 表示以第 i 个怪物为结尾时,小美能连续打败的最大怪物数量喵~然后检查每个怪物:如果它的生命力 ≥ h 或者攻击力 ≥ a,说明小美只能哭唧唧,根本打不过喵(ㄒoㄒ),只能标记 dp[i] = -1;否则,至少可以单独打败它,就设 dp[i] = 1 啦!

要状态转移了喵~

接下来开始遍历,对于每个怪物 i,去一个一个偷偷瞄它前面的所有怪物。

当瞄到第 j 个怪物时,小美就该想想啦!如果怪物 i 的生命力和攻击力都严格大于怪物 j 的,那么小美在打败 j 之后,还可以继续打败 i 喵~所以 dp[ i ] 就可以更新为 max( dp[ i ] , dp[ j ] + 1) 哦!我们要一直保留最多的数!这样就可以打更多魔物了喵~

最后,遍历整个 dp 数组,找出里面的最大值,就是小美能连续打败的最多怪物数量啦!

如果最大值是 -1,那就说明小美一个都打不过喵,鱼干也泡汤啦喵~ >_<

这样一步步来,就可以讨伐更多的魔物,给我买更多的小鱼干了喵!(^▽^)

 如果还有哪里不明白,猫猫可以再详细解释nya~

#include <bits/stdc++.h>
#include <unordered_map>
using namespace std;
using ll=long long;

int main() {
    ll n,h,a;cin >> n >> h >> a; 
    vector<pair<ll,ll>> mb(n);//怪物的面板(mb)<h,a>
    vector<ll>dp(n);
    for(ll i=0;i<n;i++) cin >> mb[i].first;
    for(ll i=0;i<n;i++) cin >> mb[i].second;
    sort(mb.begin(),mb.end());//怪物以h升序排列,若相等,则按a升序排列
    for(ll i=0;i<n;i++) 
    {
        if(mb[i].first>=h||mb[i].second>=a) dp[i]=-1;
        //dp标记-1代表小美不可能打过这只怪
        else dp[i]=1;
    }
    
    for(ll i=0;i<n;i++)
    {
        if(dp[i]==-1) continue;
        for(ll j=0;j<i;j++) 
        {
            if(dp[j]==-1) continue;
            if(mb[i].first>mb[j].first&&mb[i].second>mb[j].second)
            {
                dp[i]=max(dp[i],dp[j]+1);
            }
        }
    }
    ll ans=0;
    for(int i=0;i<n;i++)
    {
        ans=max(dp[i],ans);
    }
    cout << ans;
}
/*
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣤⡀⣀⣠⣤⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⡀⢀⣴⣾⣷⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣷⣾⣿⣷⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⠛⠉⠉⠉⠉⠉⠉⠛⠻⠿⣿⣿⣿⣿⣿⣶⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⣿⣿⣿⡿⠿⠛⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠿⣿⣿⣿⣷⣄⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⣀⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⣰⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣠⣾⣿⣿⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣶⣄⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣻⣿⣿⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢹⣿⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⠁⠈⢢⡀⠀⠀⠀⢸⡇⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣿⡟⠒⢦⡀⠀⠀⠀
⠀⠀⣠⣤⣤⣼⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⡇⠀⠀⠀⠉⢢⣄⠀⠀⢿⠊⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣷⡄⠀⢷⠀⠀⠀
⠀⢰⠇⠀⣰⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⡌⣹⠗⠦⣬⣇⠀⠉⢢⡀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣿⡀⢸⡄⠀⠀
⠀⡟⠀⣼⣯⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣆⢹⡀⠀⠀⠀⠉⠁⠀⠀⢀⣀⡁⠀⠀⠉⠳⢴⡆⠀⠀⠀⠀⠀⠀⢹⣧⠈⡇⠀⠀
⠀⡇⠀⠀⢻⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣾⠻⠉⠛⠂⠀⠀⠀⠀⠀⠀⠻⠿⣿⣿⣿⣶⣦⡀⠛⣇⠀⠀⠀⠀⠀⣈⣿⠀⡇⠀⠀
⢸⡇⠀⠀⢠⣿⣷⣦⣀⡸⣷⣦⣶⡂⠉⠉⠉⢁⣤⣶⡶⠀⠀⠀⣀⣀⡴⠀⠀⠀⠀⠀⠀⠈⠉⠉⠁⠀⡟⢀⣴⣟⣰⣾⣿⣏⣠⠇⠀⠀
⠈⡇⠀⠀⢸⣿⠁⠉⣿⠛⠛⠃⡇⠀⠀⢠⣶⣿⡿⠛⠁⠀⠀⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠼⢿⠟⠿⢿⡏⠀⠘⣿⡀⠀⠀⠀
⠀⢷⣀⣀⣿⠇⠀⠀⢿⡇⠀⢀⢱⡀⠀⠛⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠀⠀⢸⠇⠀⠀⢹⣿⣄⠀⠀
⠀⠀⣉⣿⡏⠀⠀⠀⠀⠀⠀⢸⣇⣳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡰⣿⠃⠀⠀⠀⠀⠀⠀⣿⠈⢧⠀
⠀⠘⣿⣿⠁⠀⠀⠀⠀⠀⠀⠘⣿⡛⣶⠀⠀⣠⠔⠒⠛⠒⠦⡀⠀⠀⠀⠀⣠⡤⠶⠤⢤⣀⠀⠀⠀⢀⣏⡄⠀⠀⠀⠀⠀⡀⣿⡆⠈⣧
⣠⡾⠛⣿⣿⣧⠀⠀⠀⠀⢸⣿⠾⢿⡿⠀⣰⠃⠀⠀⠀⠀⠀⢹⡄⠀⠀⡼⠁⠀⠀⠀⠀⠈⠙⣦⠀⢸⣿⡇⣾⣣⡀⠀⢰⣿⣿⣿⣤⠾
⡟⠀⠀⠻⣿⡟⢷⡄⣤⡀⠈⣿⡀⣸⠇⠀⠏⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⡇⢀⡀⠀⠀⠀⠀⢀⡟⠀⠀⠋⣿⣿⣿⡇⣠⣿⠿⠛⢷⡀⠀
⠀⠀⠀⠀⣿⣇⣨⣿⣿⣿⣦⣽⣷⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠃⠀⠙⠢⠤⠤⠴⢾⠀⠀⠀⠀⢸⣷⣿⣿⠟⠁⠀⠀⠈⣧⠀
⠀⠀⠀⠀⠈⠉⠉⠁⠈⠉⠈⢉⣿⡁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⣿⠀
*/

全部评论
豪猫 喜欢
1 回复 分享
发布于 01-05 20:37 江西

相关推荐

02-28 01:18
已编辑
南昌大学 后端工程师
后测速成辅导一两个月...:把开源经历放个人项目上边应该更好,就像大部分人都把实习经历放个人项目上边
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
5080次浏览 51人参与
# 百度工作体验 #
316364次浏览 2232人参与
# 米连集团26产品管培生项目 #
7617次浏览 235人参与
# 沪漂/北漂你觉得哪个更苦? #
1804次浏览 43人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
16943次浏览 137人参与
# 春招至今,你的战绩如何? #
16628次浏览 150人参与
# 巨人网络春招 #
11584次浏览 232人参与
# 你的实习产出是真实的还是包装的? #
3423次浏览 58人参与
# HR最不可信的一句话是__ #
1196次浏览 33人参与
# AI面会问哪些问题? #
1048次浏览 29人参与
# 你做过最难的笔试是哪家公司 #
1414次浏览 24人参与
# AI时代,哪个岗位还有“活路” #
3089次浏览 54人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152992次浏览 889人参与
# 简历第一个项目做什么 #
32246次浏览 367人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
8066次浏览 43人参与
# 简历中的项目经历要怎么写? #
311295次浏览 4282人参与
# XX请雇我工作 #
51168次浏览 171人参与
# 投格力的你,拿到offer了吗? #
178440次浏览 891人参与
# 你最满意的offer薪资是哪家公司? #
77039次浏览 375人参与
# AI时代,哪些岗位最容易被淘汰 #
65002次浏览 910人参与
# 秋招白月光 #
731590次浏览 5439人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187700次浏览 1123人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务