2017"百度之星"程序设计大赛 - 资格赛-度度熊与邪恶大魔王(dp+后缀最小值)
思路:由于防御和血量的范围很小,所以暴力枚举出对于每种防御造成的每种伤害所需的最小花费,最后只需在伤害大于等于血量的情况下再找到最小花费(这个只需要后缀最小值预处理一下就可以了)
状态:dp[i][j]表示对防御为i的怪兽造成伤害为j的所需最小晶石花费。
状态转移方程:dp[i][j]=min(dp[i][j],dp[i][j-t])(t表示每种技能造成的伤害,t=p-i,t>0)
代码1:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ls rt<<1,l,m
#define rs rt<<1|1,m+1,r
#define pb push_back
#define mem(a,b) memset((a),(b),sizeof(a))
const int INF=0x3f3f3f3f;
const int N=2e3+;//必须开2e3,因为造成的伤害是大于等于血量的(1000+1000)
const int M=1e5+;
int dp[][N];
int a[M],b[M],k[N],p[N];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
for(int i=;i<n;i++)
{
scanf("%d%d",&a[i],&b[i]);
}
for(int i=;i<m;i++)
{
scanf("%d%d",&k[i],&p[i]);
}
mem(dp,INF);
for(int i=;i<=;i++)
{
dp[i][]=;//所有状态的初始状态都是dp[i][0]
for(int j=;j<m;j++)
{
int t=p[j]-i;
if(t<=)continue;
for(int l=t;l<N;l++)
{
dp[i][l]=min(dp[i][l-t]+k[j],dp[i][l]);
}
}
for(int j=N-;j>=;j--)
{
dp[i][j]=min(dp[i][j+],dp[i][j]);//求一下后缀最小值
}
}
ll ans=;
bool flag=false;
for(int i=;i<n;i++)
{
ans+=dp[b[i]][a[i]];
if(dp[b[i]][a[i]]==INF)flag=true;//等于INF表示不存在这样的最小花费
}
if(flag)cout<<-<<endl;
else cout<<ans<<endl;
}
return ;
}
代码2:
上面那个代码是先枚举技能再枚举伤害的,这个代码是先枚举伤害再枚举技能的,相比而言这个要慢一些,因为上面那个枚举技能时就知道伤害的范围(下界即t),相当于下面这个代码剪过枝了。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ls rt<<1,l,m
#define rs rt<<1|1,m+1,r
#define pb push_back
#define mem(a,b) memset((a),(b),sizeof(a))
const int INF=0x3f3f3f3f;
const int N=2e3+;
const int M=1e5+;
int dp[][N];
int a[M],b[M],k[N],p[N];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
for(int i=;i<n;i++)
{
scanf("%d%d",&a[i],&b[i]);
}
for(int i=;i<m;i++)
{
scanf("%d%d",&k[i],&p[i]);
}
mem(dp,INF);
for(int i=;i<=;i++)
{
dp[i][]=;
for(int j=;j<N;j++)
{
for(int l=;l<m;l++)
{
int t=p[l]-i;
if(t<=||t>j)continue;
dp[i][j]=min(dp[i][j-t]+k[l],dp[i][j]);
}
}
for(int j=N-;j>=;j--)
{
dp[i][j]=min(dp[i][j+],dp[i][j]);
}
}
ll ans=;
bool flag=false;
for(int i=;i<n;i++)
{
ans+=dp[b[i]][a[i]];
if(dp[b[i]][a[i]]==INF)flag=true;
}
if(flag)cout<<-<<endl;
else cout<<ans<<endl;
}
return ;
}
2017"百度之星"程序设计大赛 - 资格赛-度度熊与邪恶大魔王(dp+后缀最小值)的更多相关文章
- 2017"百度之星"程序设计大赛 - 资格赛 度度熊的王国战略
度度熊的王国战略 度度熊国王率领着喵哈哈族的勇士,准备进攻哗啦啦族. 哗啦啦族是一个强悍的民族,里面有充满智慧的谋士,拥有无穷力量的战士. 所以这一场战争,将会十分艰难. 为了更好的进攻哗啦啦族,度度 ...
- hdu 6082 度度熊与邪恶大魔王(2017"百度之星"程序设计大赛 - 资格赛 )
度度熊与邪恶大魔王 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- [SinGuLaRiTy] 2017 百度之星程序设计大赛-资格赛
[SinGuLaRiTy-1034] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 度度熊保护村庄 Time Limit: 2000/10 ...
- 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】
度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
- 2017"百度之星"程序设计大赛 - 资格赛
度度熊与邪恶大魔王 Accepts: 3666 Submissions: 22474 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- 2017"百度之星"程序设计大赛 - 资格赛 1002 度度熊的王国战略
全局最小割 Stoer-Wagner (SW算法)优化 优化吃藕了,感谢放宽时限,感谢平板电视 (pb_ds) #include <iostream> #include <cstdi ...
- 2017"百度之星"程序设计大赛 - 资格赛 寻找母串
Problem Description 对于一个串S,当它同时满足如下条件时,它就是一个01偏串: 1.只由0和1两种符组成: 2.在S的每一个前缀中,0的个数不超过1的个数: 3.S中0的个数和1的 ...
- HDU 6118 度度熊的交易计划 【最小费用最大流】 (2017"百度之星"程序设计大赛 - 初赛(B))
度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 6119 小小粉丝度度熊 【预处理+尺取法】(2017"百度之星"程序设计大赛 - 初赛(B))
小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
随机推荐
- Django初级手册4-表单与通用视图
表单的编写 1. detail.html模版的编写 <h1>{{ poll.question }}</h1> {% if error_message %}<p>&l ...
- Java中如何优雅地删除List中的元素
在工作中的许多场景下,我们都会使用到List这个数据结构,那么同样的有很多场景下需要删除List中的某一个元素或某几个元素,那么我们该如何正确无误地删除List中的元素的,今天我来教大家三种方式. 前 ...
- ARM的Trust Zone技术
ARM的Trust_Zone技术是一个系统的Access Control的架构. 与AXI,AHB,APB其中的secure,supervisor信号相关联. 与ARM core的模式相关连,当ARM ...
- source的简单操作
source五部曲 git工作流:建立新功能 更改文件后,提交 点击git工作流完成新功能 点击推送 点击拉取
- office word 2010 怎么把左侧的标题大纲调出来?
有时候打开Word很希望出现左边的大纲,可是有时候就不出来,对word一些操作都忘得差不多了,这个小问题确实还是让我迷糊了一下~~ 网上的解决方案是: 打开Word2010文档窗口,切换到“视图”功能 ...
- JsonPath的使用
语法: JsonPath 描述 $ 根节点 @ 当前节点 .or[] 子节点 .. 选择所有符合条件的节点 * 所有节点 [] 迭代器标示,如数组下标 [,] 支持迭代器中做多选 [start:end ...
- P4180 【模板】严格次小生成树[BJWC2010]
P4180 [模板]严格次小生成树[BJWC2010] 倍增(LCA)+最小生成树 施工队挖断学校光缆导致断网1天(大雾) 考虑直接枚举不在最小生成树上的边.但是边权可能与最小生成树上的边相等,这样删 ...
- c++ 11开始语言本身和标准库支持并发编程
c++ 11开始语言本身和标准库支持并发编程,意味着真正要到编译器从语言和标准库层面开始稳定,估计得到17标准出来.14稳定之后的事情了,根据历史经验,新特性的引入到稳定被广泛采用至少要一个大版本的跨 ...
- 20145225唐振远《网络对抗》 Web安全基础实践
20145225唐振远<网络对抗>Web安全基础实践 参考博客:20145215 卢肖明 基础问题回答 (1)SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web ...
- 20145335郝昊《网络攻防》Exp9 Web安全基础实践
20145335郝昊<网络攻防>Exp9 Web安全基础实践 实验内容 理解常用网络攻击技术的基本原理. 完成WebGoat实践下相关实验 实验步骤 XSS注入攻击 Phishing wi ...