zoukankan      html  css  js  c++  java
  • 牛客网第十五届浙江大学宁波理工学院程序设计大赛(同步赛)L题The Last Stand

    牛客网第十五届浙江大学宁波理工学院程序设计大赛(同步赛)

    The Last Stand

    题意不在描述

    分析:

    简单dp

    ​ dp[i]表示经过第i个点时候的最大能量(不选)

    那么

    dp[i]=max(dp[j]+val[j]+(pos[i]pos[j])delta[j]),0<=j<idp[i]=max(dp[j]+val[j]+(pos[i]-pos[j])*delta[j]), 0<=j<i

    初始令

    val[0]=h,delta[0]=0;dp[0]=h

    求dp[n+1]即可

    #include<cstdio>
    #include<algorithm>
    #include<string>
    #include<cstring>
    #include<iostream>
    #include<iomanip>
    #include<map>
    #include<vector>
    #define mset(a,b)   memset(a,b,sizeof(a))
    using namespace std;
    typedef unsigned long long ull;
    typedef long long ll;
    const int maxn=1e3+10;
    const int branch=26;
    const int inf=0x3f3f3f3f;
    ll pos[maxn],val[maxn],delta[maxn];
    ll dp[maxn];
    int main()
    {
        int n,ans,h,t,pp,m,vv,dd;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d %d %d",&n,&m,&h);
            mset(dp,0);
            for(int i=1; i<=n; ++i)
                scanf("%lld %lld %lld",pos+i,val+i,delta+i);
            pos[0]=0;
            val[0]=0;
            delta[0]=0;
            dp[0]=h;
            pos[n+1]=m;
            val[n+1]=0;
            delta[n+1]=0;
            for(int i=0; i<=n+1; ++i)
            {
                for(int j=0; j<i; ++j)
                {
                    if(dp[j]+val[j]>0)//走到这个点之前选择的是j这个点
                    {
                        dp[i]=max(dp[i],dp[j]+(pos[i]-pos[j])*delta[j]+val[j]);
                    }
    
                }
            }
    
            printf("%lld
    ",dp[n+1]);
        }
        return 0;
    }
    
  • 相关阅读:
    图片水平垂直居中 多行文字垂直居中
    ie8支持rgba方法
    html5学习(1)
    青岛鲁银商品交易中心
    PHP 生成16 uuid
    探索区块链-挖框体验
    微信小游戏-微信提供了啥
    error: libXpm.(a|so)
    从0到9取4位不同数字的排列组合算法
    visual studio 2015 rc &cordova -hello world
  • 原文地址:https://www.cnblogs.com/dchnzlh/p/10427271.html
Copyright © 2011-2022 走看看