2010-1104
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
by liangjiaxing
'''题目描述:'''[[BR]]
小叮当打坏人。开始时,小叮当有lh的血量和0的技能值,现场有n个敌人。[[BR]]
他每回合有4种方法:[[BR]]
1.打掉一个敌人并增加一个技能值。[[BR]]
2.补lh*0.2血[[BR]]
3.用尽现有技能值s,打掉Ds个敌人[[BR]]
4.不动[[BR]]
小叮当打完之后,剩下 a 个敌人,小叮当扣 a 血,补充 a%3 的技能值。[[BR]]
问最少多少步打完所有敌人。[[BR]]
'''解题方法:'''[[BR]]
广度优先搜索,用结构体[[BR]]
{{{
struct p{
int en, hp,sp,turn;
}p[1100000];
}}}
来表示状态,en表示敌人数,hp表示血量,sp表示技能值,turn表示回合数。[[BR]]
初始时,
[[BR]]
p[0].en=n;
[[BR]]
p[0].hp=lh;
[[BR]]
p[0].sp=0;
[[BR]]
p[0].turn=0;
[[BR]]
然后按照上述4种方案进行状态转移。
---
by pxhdg
实际上对于相同的敌人数与技能值,HP越多越好,因此只要记录HP最多的状态就可以了,只需要100*40=4000个状态
---
by liangjiaxing
有道理
by liangjiaxing
题目描述:
小叮当打坏人。开始时,小叮当有lh的血量和0的技能值,现场有n个敌人。
他每回合有4种方法:
1.打掉一个敌人并增加一个技能值。
2.补lh*0.2血
3.用尽现有技能值s,打掉Ds个敌人
4.不动
小叮当打完之后,剩下 a 个敌人,小叮当扣 a 血,补充 a%3 的技能值。
问最少多少步打完所有敌人。
解题方法:
广度优先搜索,用结构体
struct p{
int en, hp,sp,turn;
}p[1100000];
来表示状态,en表示敌人数,hp表示血量,sp表示技能值,turn表示回合数。
初始时,
p[0].en=n;
p[0].hp=lh;
p[0].sp=0;
p[0].turn=0;
然后按照上述4种方案进行状态转移。
---
by pxhdg
实际上对于相同的敌人数与技能值,HP越多越好,因此只要记录HP最多的状态就可以了,只需要100*40=4000个状态
---
by liangjiaxing
有道理