HOJ 2252 The Priest(动态规划)
The Priest
Source : 计算机学院第二届“光熙杯”程序设计大赛
Time limit : 3 sec Memory limit : 32 M
Submitted : 186, Accepted : 51
Recently bailey playes a role in the game “world of warcraft”.It is a priest. The priest has n skills to heal the friends. Each skill costs different mana and adds different HP to the friends. When fighting with enemies, bailey wants to spend the minimal mana keeping the friend alive(If the friend’s HP<=0,he will die).But he doesn’t know how much is enough.He asks you for help.Let us consider a simple condition:
The priest has infinite mana but can only heal the friends once after a hurt.
Input
The first line of the input file contains a single integer t , the number of test cases, followed by the input data for each test case.
Each test case countains 2 lines as follow:
n m1 h1 m2 h2……mn hn
HP k d1 d2……dk
n gives the number of skills. mi hi means that the ith skill will cost the priest mi mana and add hi HP to the friend.
HP gives the max HP the friend has and in the beginning it’s full. k gives the number of hurt. di means the ith hurt will cost the friend di HP.( 0 < n <= 5 , 0 < mi <= 100 , 0 < HP <= 1000, 0 < k <= 100)
Output
One line for each case. If after k hurts the friend can be alive, output the minimal mana the priest can spend keeping the friend alive.Otherwise output “Lose the friend.”
Sample Input
2
2 1 4 2 10
15 2 8 11
2 1 4 2 10
15 2 14 12
Sample Output
2
Lose the friend.
哎这道题目我wa了19次,因为一条件忽视了吧。多想想,状态转移方程还是比较容易想通的
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <stdio.h>
#include <math.h>
using namespace std;
#define MAX 10000000
int dp[105][1005];
int v[10];
int w[10];
int a[105];
int tag[1005];
int hp;
int n,k;
int sum;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
sum=0;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&v[i],&w[i]);
}
scanf("%d%d",&hp,&k);
bool live=true;
for(int i=1;i<=k;i++)
{
scanf("%d",&a[i]);
if(a[i]>hp)
live=false;
}
if(!live)
{
printf("Lose the friend.\n");
continue;
}
for(int i=0;i<=101;i++)
for(int j=0;j<=1001;j++)
dp[i][j]=MAX;
a[0]=0;
dp[0][hp]=0;
memset(tag,0,sizeof(tag));
for(int i=1;i<=k;i++)
{
memset(tag,0,sizeof(tag));
for(int j=1;j<=hp;j++)
{
if(j==hp)
{
for(int p=1;p<j;p++)
{
if(dp[i][p]==MAX)
continue;
if(tag[p]==1)
continue;
for(int q=1;q<=n;q++)
{
if(p+w[q]>=hp)
dp[i][hp]=min(dp[i][hp],dp[i][p]+v[q]);
}
}
}
if(j+a[i]<=hp&&dp[i-1][j+a[i]]!=MAX)
dp[i][j]=min(dp[i][j],dp[i-1][j+a[i]]);
for(int q=1;q<=n;q++)
{
if(j>w[q]&&!tag[j-w[q]]&&dp[i][j]>dp[i][j-w[q]]+v[q])
{
dp[i][j]=dp[i][j-w[q]]+v[q];
tag[j]=1;
}
}
}
}
int ans=MAX;
for(int j=1;j<=hp;j++)
{
ans=min(ans,dp[k][j]);
}
if(ans==MAX)
printf("Lose the friend.\n");
else
printf("%d\n",ans);
}
return 0;
}
HOJ 2252 The Priest(动态规划)的更多相关文章
- HOJ 2133&POJ 2964 Tourist(动态规划)
Tourist Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1503 Accepted: 617 Description A ...
- HOJ 2139 Spiderman's workout(动态规划)
Spiderman's workout My Tags (Edit) Source : Nordic Collegiate Programming Contest 2003 Time limit : ...
- HOJ 13845 Atomic Computer有向无环图的动态规划
考虑任意一个数字,任何一个都会有奇怪的..性质,就是一个可以保证不重复的方案——直接简单粗暴的最高位加数字..于是,如同上面的那个题:+1.-1.0 但是考虑到65536KB的标准内存限制,会得出一个 ...
- HOJ 2124 &POJ 2663Tri Tiling(动态规划)
Tri Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9016 Accepted: 4684 Descriptio ...
- {POJ}{动态规划}{题目列表}
动态规划与贪心相关: {HDU}{4739}{Zhuge Liang's Mines}{压缩DP} 题意:给定20个点坐标,求最多有多少个不相交(点也不相交)的正方形 思路:背包问题,求出所有的正方形 ...
- HOJ题目分类
各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...
- [置顶] 刘汝佳《训练指南》动态规划::Beginner (25题)解题报告汇总
本文出自 http://blog.csdn.net/shuangde800 刘汝佳<算法竞赛入门经典-训练指南>的动态规划部分的习题Beginner 打开 这个专题一共有25题,刷完 ...
- HOJ 1402 整数划分
HOJ1402 整数划分 http://acm.hit.edu.cn/hoj/problem/view?id=1402 [题目描述] 整数划分是一个经典的问题.希望这道题会对你的组合数学的解题能力有所 ...
- 增强学习(三)----- MDP的动态规划解法
上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...
随机推荐
- android NavigationBar 显示
android连接7inch屏时,虚拟按键会显示到右侧,变成一条黑边,并且只有back功能. 在连接10inch的时候,虚拟按键就正常,显示在屏幕的底部.有back,home,recent app三个 ...
- 静态库lib
步骤: 按普通方式编程,无需export 其中静态库就是中间文件,跟obj文件类似. 静态库的使用不太方便: 如果该静态库是vs2008编译的,那么APP也得用vs2008编译,版本必须一致.且编译方 ...
- bootstrap -- css -- 图片
图片样式 .img-rounded:添加 border-radius:6px 来获得图片圆角 .img-circle:添加 border-radius:500px 来让整个图片变成圆形. img-ci ...
- LINUX下CPU Load Average的一点研究
背景: 公司的某个系统工作在基于Linux的Cent OS下,一个host下同时连接了许多client, 最近某台Host总是显示CPU Load Average过高,我们单纯的以为是CPU的占用过高 ...
- SimplifiedHibernate:简化了的Hibernate
我的目的是实现下Hibernate中增删改查.缓存的核心功能.虽然基本功能实现了,但可能还有好多Bug,欢迎点评拍砖,没准能在一片谩骂声中取得意想不到的进步,:) // DatabaseAccess. ...
- springcloud(十):服务网关zuul初级篇
前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,Spring Cloud Config服务集群配置中心,似乎一个 ...
- Windows "计划任务"功能设置闹钟~
相信很多人和我一样在使用电脑时都会遇到这样一个麻烦:不知道如何在windows 中设置一个闹铃.当我们在“开始”菜单的所有程序中找了一遍又一遍,甚至使用Everything.exe做全盘的搜索,都没有 ...
- NopCommerce的定时任务分析和应用
NOP的定时任务也是群里听群友听说,我很少在WEB端做定时任务,所以尝鲜下,看看效果怎么样. 主要涉及到下面几个类和配置文件配置: web.config <configSections> ...
- try catch finally的执行顺序
1.将预见可能引发异常的代码包含在try语句块中. 2.如果发生了异常,则转入catch的执行.catch有几种写法: catch 这将捕获任何发生的异常. catch(Exception e) 这将 ...
- SpringBoot(零)-- 工程创建
一.约定优于配置 二.快速创建SoringBoot项目 地址:http://start.spring.io/ 三.在步骤二中,创建好了SpringBootDemo 项目,导入Eclipse 自定义ba ...