2389: Occult的卡片升级计划

Description

Occult喜欢玩一款手游,手游中有很多好看的卡片。他想要升级这些卡。

现在他有m块经验石,目标是强化一张卡片,卡片最开始的时候是0级,卡片会升级,而升级所需的经验会越来越多。

假设卡片满级是n级,给出a[1],a[2]....a[n],a[i]表示从i-1级升到i级所需的经验石数量。保证a[1]+a[2]+...+a[n]=m,且a[1]<=a[2]<=..<=a[n]。

然而每次强化是要付钱的,并且每次加的经验石的数量是有限的,最多为10个。

每一次强化要付的金钱等于这一次加的经验石的数量乘上当前卡片的等级。

Occult想知道要把这张卡片从0级升到满级最少需要支付多少金钱。

例如输入:

2 15

5 10

表示卡片满级是2级,现在有15块经验石。第0级升到第1级所需的经验石数量是5个,第1级升到第2级所需的经验石数量是10个。

我们可以采取以下升级策略,使得支付的金钱最少:

[第一次强化]

加4个经验石。这次强化的费用:0级×4个石头=0元。强化之后升到了0级。

[第二次强化]

加10个经验石。这次强化的费用:0级×10个石头=0元。强化之后升到了1级。

[第三次强化]

加1个经验石。这次强化的费用:1级×1个石头=1元。强化之后升到了2级。

强化完毕,把三次的花费加起来,是1元。

Input

多组测试数据。

每组测试数据第一行输入n,m。(0<n<=m<=100000)

第二行输入n个整数a[1],a[2]......,a[n]。

保证a[1]+a[2]+...+a[n]=m,且a[1]<=a[2]<=..<=a[n]。

Output

对于每组测试数据,输出卡片从0级升到满级需要支付的最少金钱。

Sample Input

2 15
5 10

Sample Output

1

______________________________________________________________________________________________________________________

我们要考虑当升级第i张卡片时它的最小花费为从i-10到i-1之间的卡片花费加上这次升级的花费其中的最小值;
即  s[i]=min(s[i-1]+k[i-1]*1,s[i-2]+k[i-2]*2,……,s[i-10]+k[i-10]*10])数组k表示用k快经验石后的等级。
根据这个关系容易写出代码



#include <iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int min(int a, int b)
{
return (a < b) ? a : b; }
int main()
{
int m, n, a[100005], cnt, tot, sum;
long long int s[100005], mn, k[100005], j;
while (~scanf("%d%d", &n, &m))
{ for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
cnt = 0;
tot = 2;
sum = a[1];
memset(k, 0, sizeof(k));
for (int i = 0; i <= m; i++)
{
if (i>=sum)
{
cnt++;
sum += a[tot++];
}
k[i] += cnt;
}
s[0] = 0;
for (int i = 1; i <= m; i++)
{
mn = s[i - 1] + k[i - 1];
for (j = 1; j <= 10; j++)
{
if (j>i)
break;
mn = min(mn, s[i - j] + k[i - j] * j);
}
s[i] = mn;
}
printf("%lld\n", s[m]);
}
return 0;
}


ZUFE2389: Occult的卡片升级计划(DP) 2016-05-17 23:12 113人阅读 评论(0) 收藏的更多相关文章

  1. hdu 1231, dp ,maximum consecutive sum of integers, find the boundaries, possibly all negative, C++ 分类: hdoj 2015-07-12 03:24 87人阅读 评论(0) 收藏

    the algorithm of three version below is essentially the same, namely, Kadane's algorithm, which is o ...

  2. HDU1506(单调栈或者DP) 分类: 数据结构 2015-07-07 23:23 2人阅读 评论(0) 收藏

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  3. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 分类: dp 2015-05-21 10:50 14人阅读 评论(0) 收藏

    Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并 ...

  4. hdu3853 LOOPS(概率dp) 2016-05-26 17:37 89人阅读 评论(0) 收藏

    LOOPS Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) Total Su ...

  5. Hdu2102 A计划 2017-01-18 14:40 60人阅读 评论(0) 收藏

    A计划 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissio ...

  6. HDU1078 FatMouse and Cheese(DFS+DP) 2016-07-24 14:05 70人阅读 评论(0) 收藏

    FatMouse and Cheese Problem Description FatMouse has stored some cheese in a city. The city can be c ...

  7. Max Sum—hdu1003(简单DP) 标签: dp 2016-05-05 20:51 92人阅读 评论(0)

    Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  8. Murano Weekly Meeting 2016.05.17

    Meeting time: 2016.May.17 1:00~2:00 Chairperson:  Kirill Zaitsev, from Mirantis Meeting summary:   1 ...

  9. 2016/05/17 thinkphp3.2.2 分页的使用:①在Home下设置Publics文件夹或在thinkPHP下library的vender 把page.class.php 考贝进入 ②通过new 实例化方式调用 $page=new \Home\Publics\Page($total,3);

    注意分页的方法有两种:一种是thinkphp3.2 自带的   另一种是之前新闻页用过的     显示效果稍有差别 显示效果: 细节问题: ①搜索页面  要加session判断   和  分页 ②修改 ...

随机推荐

  1. 【346】TF-IDF

    Ref: 文本挖掘预处理之向量化与Hash Trick Ref: 文本挖掘预处理之TF-IDF Ref: sklearn.feature_extraction.text.CountVectorizer ...

  2. 使用通用mapper 生成代码

    参考通用mapper 文档:https://github.com/abel533/Mapper/wiki/4.1.mappergenerator 使用maven 的方法: 1,修改pom.xml &l ...

  3. The Last Stand

    The Last Stand https://ac.nowcoder.com/acm/contest/303/L 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语 ...

  4. 【校招面试 之 C/C++】第11题 C++ 纯虚函数

    1.纯虚函数 成员函数的形参后面写上=0,则成员函数为纯虚函数. 纯虚函数声明: virtual 函数类型 函数名 (参数表列) = 0: class Person { virtual void Di ...

  5. [leetcode]211. Add and Search Word - Data structure design添加查找单词 - 数据结构设计

    Design a data structure that supports the following two operations: void addWord(word) bool search(w ...

  6. 表单提交的两种请求方式:post与get。post与get两者的对比分析

    post与get两者的对比分析:

  7. Debian 采用 iso 镜像作为 apt 源

    1.将N个debian-506-amd64-DVD-N.iso存放于本地或其他媒介内,本例是放在本机/iso/目录下2.创建N个挂载点目录 如下: debian:~#mkdir –r /media/d ...

  8. 7.25 js 自定义方法 a.b

    调用: $(function(){ Starinput.initiate({name:'qr1_z.startlevel',tar: $("#sitelogo1"), stars: ...

  9. 3层+SVN学习笔记(1)

    public List<MemberTypeInfo> GetList() { //查询未删除的数据 string sql = "select * from memberType ...

  10. 2018.10.09 NOIP模拟 好数(双向搜索)

    传送门 直接双向搜索出两边可行解,然后把两边的可行解合并起来得出答案就行了. 注意合并的时候可以利用排序和单调性优化时间复杂度. 直接枚举合并是O(siza∗sizb)O(siza*sizb)O(si ...