zoukankan      html  css  js  c++  java
  • SRM 563 500pts SpellCards

    SpellCards

     题意:

      有n张符卡排成一个队列,每张符卡有两个属性,等级li和伤害di。 两种操作: 1、把队首的符卡移动到队尾;2、使用队首的符卡,对敌人造成di点伤害,并丢弃队首的li张符卡(包括使用的符卡)。如果队列不足li张符卡那么你不能使用。 求出造成的伤害的总和的最大值。 1<=n<=50, 1<=li<=50, 1<=di<=10000。

    分析:

      由于第一种操作的存在, 可以将序列认为是一个环。如果一个方案合法,满足li的和<=n即可。因为总是可以改变使用的顺序,使得方案满足。设选择的有a,b,即使a后面的l[a]个包含b,但是可以先使用b,再使用a,其他的类似。

     代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long LL;
     4 
     5 class SpellCards{
     6 public:
     7     int f[1005];
     8     SpellCards() { memset(f, 0, sizeof(f)); }
     9     int maxDamage(vector<int>L, vector<int>D) {
    10         int n = L.size();
    11         for (int i=0; i<n; ++i) {
    12             for (int j=n; j>=L[i]; --j) 
    13                 f[j] = max(f[j], f[j - L[i]] + D[i]);
    14         }
    15         return f[n];
    16     }
    17 };
  • 相关阅读:
    性能测试分析
    常见的性能缺陷
    性能测试中TPS上不去的几种原因浅析
    Linux新增和删除环境变量
    JProfiler的详细使用介绍
    详解Tomcat的连接数和线程池
    造数据存储过程
    shell脚本解压多个jar包
    使用shell快速建立上万个文件夹
    df、du命令
  • 原文地址:https://www.cnblogs.com/mjtcn/p/9770594.html
Copyright © 2011-2022 走看看