zoukankan      html  css  js  c++  java
  • ZOJ 3623 Battle Ships 简单DP

    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3623

    题意:给出N种可以建造的船和对方的塔生命值L,每种船给出建造时间t[i]和每秒输出dps[i],船坞在同一时间仅仅能建造一支船(类似红警),问多少时间以后可以灭掉塔。

    思路:dp[i]代表的是在前i秒内能造成的伤害量,把时间反过来考虑,对于每支船的建造,在前i秒内所占用的建造时间是第i-t[i]+1~i秒,状态转移方程是dp[i+t[j]]=max(dp[i+t[j]],dp[i]+dps[j]*i),因为建设船的时间是第i~t[i]+1~i秒,所以在状态转移时不会出现建设时间的重叠情况。

    P.S.比赛的时候不机智了,题意里的each time被我理解成了每秒能够选择造一艘新的船。

    代码:

    #include <algorithm>
    #include <cmath>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <ctime>
    #include <ctype.h>
    #include <iostream>
    #include <map>
    #include <queue>
    #include <set>
    #include <stack>
    #include <string>
    #include <vector>
    #define eps 1e-8
    #define INF 0x7fffffff
    #define maxn 10005
    #define PI acos(-1.0)
    #define seed 31//131,1313
    typedef long long LL;
    typedef unsigned long long ULL;
    using namespace std;
    int t[35],dps[35];
    int dp[355];
    int main()
    {
        int N,L;
        while(~scanf("%d%d",&N,&L))
        {
            memset(dp,0,sizeof(dp));
            for(int i=0;i<N;i++)
                scanf("%d%d",&t[i],&dps[i]);
            for(int i=0;i<=L+20;i++)
                for(int j=0;j<N;j++)
                    dp[i+t[j]]=max(dp[i+t[j]],dp[i]+dps[j]*i);
            for(int i=0;i<=L+20;i++)
                if(dp[i]>=L)
                {
                    printf("%d
    ",i);
                    break;
                }
        }
        return 0;
    }

  • 相关阅读:
    工单组件增强
    一些BAPI
    实例程序
    使用BAPI一定要提交和回滚(错误)
    动态内表值导出为TXT文件
    网页常用功能
    Code Complete
    Typescript 解构 、展开
    Typescript变量声明
    TypeScript基础数据类型
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4470692.html
Copyright © 2011-2022 走看看