P1934 封印

题目描述

很久以前,魔界大旱,水井全部干涸,温度也越来越高。为了拯救居民,夜叉族国王龙溟希望能打破神魔之井,进入人界“窃取”水灵珠,以修复大地水脉。可是六界之间皆有封印,神魔之井的封印由蜀山控制,并施有封印。龙溟作为魔界王族,习有穿行之术,可任意穿行至任何留有空隙的位置。然而封印不留有任何空隙! 龙溟无奈之下只能强行破除封印。破除封印必然消耗一定的元气。为了寻找水灵珠,龙溟必须减少体力消耗。他可以在破除封印的同时使用越行术。

神魔之井的封印共有 n 层,每层封印都有一个坚固值。身为魔族的龙溟单独打破一层封印时需要消耗的元气为该层封印的坚固值和封印总层数 n 的平方的乘积; 但他运用越行术时,打破第 i 层到第 j 层封印(i<j)的总元气消耗为第 i, j 层封印的坚固值之和与第 i, j 层之间所有封印层(包括第 i, j 层)的坚固值之和的乘积。同时,为了不惊动蜀山,第 i, j 层封印的坚固值之和必须不大于一个固定值 t(单独打破时该层坚固值可以大于该值) 。

输入输出格式

输入格式:

第一行包含两个正整数 n 和 t,按序表示封印层数和题中所述的固定值。

第二行为 n 个正整数a1~an,按序表示第 1 层到第 n 层封印的坚固值。

输出格式:

仅一行,包含一个正整数,表示最小消耗元气。

输入输出样例

输入样例#1: 复制

6 10
8 5 7 9 3 5
输出样例#1: 复制

578

说明

【样例说明】

先单独打破第一层,再用越行术从第二层直接打破到最后一层。 这样消耗元

气8 × 6^2+ (5 + 5) × (5 + 7 + 9 + 3 + 5) = 578。

【数据范围】

对于 10%的数据,n ≤ 10;

对于 50%的数据,n ≤ 100;

对于 70%的数据,n ≤ 500;

对于 100%的数据,n ≤ 1000,ai(1 ≤ i ≤ n) , t ≤ 20000。

洛谷题解:

由于题目具有无后效性,所以想到用DP来解决。

我们令f[i]表示打破前i层封印消耗元气的最小值,则状态转移方程如下:

f[i]=max⁡{f[i−1]+a[i]*n^2,f[k]+(a[k+1]+a[i])*sum(k+1,i)|0<k+1<i,a[k+1]+a[i]≤k}

状态转移方程写好后,问题在于求sum(k+1,i)时如果遍历一遍需要O(n)的复杂度。这样总复杂度为k(n^3),50-70分。

这个复杂度可以用预处理前缀和的方法来优化。用S[i]表示从a[1]到a[i]的

总和,则sum(k+1,i)=S[i]-S[k]。这样总复杂度为k(n^2),可以通过所有测试点。

 #include<iostream>
using namespace std;
int n,t;
long long f[],s[],a[];
int main()
{
cin>>n>>t;
int m=n*n;
for(int i=;i<=n;i++)
{
cin>>a[i];
s[i]=s[i-]+a[i];
}
for(int i=;i<=n;i++)
{
long long ans=m*a[i]+f[i-];
for(int j=;j<i;j++)
{
if(a[i]+a[j]>t)continue;
ans=min(ans,(a[i]+a[j])*(s[i]-s[j-])+f[j-]);
}
f[i]=ans;
}
cout<<f[n];
return ;
}

P1934 封印的更多相关文章

  1. 洛谷 P1934 封印

    题目传送门 解题思路: f[i]表示打到第i层的最小值 AC代码: #include<iostream> #include<cstdio> using namespace st ...

  2. 简单DP【p1934】封印

    Description 很久以前,魔界大旱,水井全部干涸,温度也越来越高.为了拯救居民,夜叉族国王龙溟希望能打破神魔之井,进入人界"窃取"水灵珠,以修复大地水脉.可是六界之间皆有封 ...

  3. BZOJ2322: [BeiJing2011]梦想封印

    Description 渐渐地,Magic Land上的人们对那座岛屿上的各种现象有了深入的了解. 为了分析一种奇特的称为梦想封印(Fantasy Seal)的特技,需要引入如下的概念: 每一位魔法的 ...

  4. 「Poetize10」封印一击

    描述 Description Nescafe由n种元素组成(编号为1~n), 第i种元素有一个封印区间[ai,bi].当封印力度E小于ai时,该元素将获得ai的封印能量:当封印力度E在ai到bi之间时 ...

  5. 9102年了,汇总下HttpClient问题,封印一个

    如果找的是core的HttpClientFactory 出门右转. 官方写法,高并发下,TCP连接不能快速释放,导致端口占完,无法连接 Dispose 不是马上关闭tcp连接 主动关闭的一方为什么不能 ...

  6. [BZOJ 2322][BeiJing2011]梦想封印

    梦想封印 题意 原题面: Problem 2322. -- [BeiJing2011]梦想封印 2322: [BeiJing2011]梦想封印 Time Limit: 20 Sec  Memory L ...

  7. 【tyvj】P2065 「Poetize10」封印一击(贪心+线段树/差分)

    http://new.tyvj.cn/p/2065 我就不说我很sb的用线段树来维护值...... 本机自测的时候想了老半天没想出怎么维护点在所有区间被多少区间包含的方法.最后一小时才想出来线段树(果 ...

  8. 【BZOJ2322】[BeiJing2011]梦想封印 高斯消元求线性基+DFS+set

    [BZOJ2322][BeiJing2011]梦想封印 Description 渐渐地,Magic Land上的人们对那座岛屿上的各种现象有了深入的了解. 为了分析一种奇特的称为梦想封印(Fantas ...

  9. 【线性基】bzoj2322: [BeiJing2011]梦想封印

    线性基的思维题+图常见套路 Description 渐渐地,Magic Land上的人们对那座岛屿上的各种现象有了深入的了解. 为了分析一种奇特的称为梦想封印(Fantasy Seal)的特技,需要引 ...

随机推荐

  1. React简单入门

    各位圆友,新年好!!! 使用 React 的网页源码时,首先,最后一个 <script> 标签的 type 属性为 text/babel .这是因为 React 独有的 JSX 语法,跟 ...

  2. 笔记57 Mybatis和Hibernate的比较

    一.Hibernate和MyBatis简介 1.Hibernate简介 Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映 ...

  3. 在当前对象中可以使用this关键字指代当前对象

    在当前对象中可以使用this关键字指代当前对象

  4. Python pillow库安装报错

    报错信息: D:\pythontest\duanxinhongzha>pip3 install pillowCollecting pillow Could not find a version ...

  5. 绘制窗体渐变背景的函数[delphi]

    绘制窗体渐变背景的函数,三个参数分别代表起始颜色,终止颜色,绘制方向procedure TForm1.Draw(StartColor:TColor;EndColor:TColor;Direction: ...

  6. NOIp2018集训test-9-23

    这个NOI模拟题怕是比你们的NOIp模拟题要简单哦.. 友好的生物 应该是一道简单题,但是机房只有辉神一个人想到正解似乎. 被我kd-tree水过去了(这不是kd-tree的裸题吗???(不是)) / ...

  7. NX-二次开发删除对象UF_OBJ_delete_object

    NX9+VS2012 #include <uf.h> #include <uf_curve.h> #include <uf_obj.h> UF_initialize ...

  8. C++之STL(标准模板库)

    STL:standard Template Lib 一.vector <1> 特点 <2> 常用函数: <3> 遍历方法: 1.for循环 2.迭代器 <4& ...

  9. 剑指offer——35二叉树的后序遍历

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同.   题解: 这道题,一开始以为将后序遍历排序后的得 ...

  10. libevent的使用 32位 64位

    前段时间一个项目需要用到高并发的服务,想着自己应该可以写一个,windwos 上使用完成端口实现,写完之后,测试感觉没什么问题,可是一上线各种各样的问题,初步怀疑是底层网路库的问题,于是决定更换网络库 ...