zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 95 (Rated for Div. 2)C. Mortal Kombat Tower(DP)

    题意:  给你一个数n,下面紧接着给你n个数,由0到1组成,如果为1则说明此boss较难,0则较简单,你的朋友每通过一个较难的boss时需使用一个跳跃点,你的朋友先手每次能杀死1或2个boss紧接着是你一直到n个boss杀完,问:至少需要多少个跳跃点.

    思路: 两种情况:

    定义两个参数:i 代表 第几个怪物,1代表我击杀怪物,0代表队友击杀怪物。

    然后分两种情况:

    1. 如果当前这个怪物是我杀的,那么  dp[i][1]=min(dp[i1][0],dp[i2][0])dp[i][1]=min(dp[i−1][0],dp[i−2][0])。

    2. 如果当前这个怪物是朋友杀的,那么 dp[i][0]=min(dp[i1][1]+a[i],dp[i2][1]+a[i1]+a[i])。

    最后 dp[i][1] 和 dp[i][0]比较大小就行了。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=2e5+10;
    const double eps=1e-7;
    const ll INF=1e9+10;
    int main()
    {
        int t;
        int n;
        ll a[N];
        ll dp[N][2];
        cin>>t;
        while(t--)
        {
            cin>>n;
            for(int i=1; i<=n; ++i)
            {
                cin>>a[i];
                dp[i][0]=INF;
                dp[i][1]=INF;
            }
            dp[1][0]=a[1];
            dp[2][0]=a[1]+a[2];
            dp[2][1]=a[1];
            for(int i=3; i<=n; ++i)
            {
                dp[i][1]=min(dp[i-1][0],dp[i-2][0]);  //如果该这个怪物是我打
                dp[i][0]=min(dp[i-1][1]+a[i],dp[i-2][1]+a[i-1]+a[i]);//如果这个怪物是对队友打
            }
            printf("%d
    ",min(dp[n][0],dp[n][1]));
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    MySQL 中随机抽样:order by rand limit 的替代方案
    mysql下distinct和group by区别对比
    MVC中实现多按钮提交(转)
    js的逻辑 OR 运算符- ||
    js 实现键盘记录 兼容FireFox和IE
    jquery扩展
    sp_executesql的用法
    MVC中,视图的Layout使用
    MVC4的过滤器
    MVC中的Repository模式
  • 原文地址:https://www.cnblogs.com/sszywq/p/13762595.html
Copyright © 2011-2022 走看看