摘要: 看起来不是很难,一道动规题(话说最近一直在刷动规题啊)一开始只想到两个动规方程:f[i,j]表示第i分钟,疲劳度为j所能跑的最大距离。我们有:f[i,j]:=f[i-1,j-1]+s[i];f[i+j,0]:=max(f[i+j,0],f[i,j]);(若从此状态开始休息,那么他的距离是和f[i+j,0]一样的)后面想想不对,还少了一个方程。因为如果你休息到疲劳度为0,那么你即可以选择跑步,也可以选择继续休息,所以我们还有一个方程:f[i,0]:=max(f[i-1,0],f[i,0])。这样就好了。其实第二个方程还可以写成另一种形式:f[i,j]:=max(f[i,j],f[i-j,0])。 阅读全文
posted @ 2012-12-02 11:42 改名字干什么 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 一道动规题目,不是很难,用两个二维数组即可搞定,f[i,j]表示吃前i道菜,当前状态用勺子或用筷子所用的最小值(j=1时代表筷子,j=2时代表勺子)。c[i,j]表示吃第i道菜,当前状态用勺子或用筷子吃该道菜的时间(这是已知数据)(j=1时代表筷子,j=2时代表勺子)t[i]表示吃第i道菜前转化餐具所额外需要的时间(这是已知数据)。我们就可以得出方程:f[i,j]:=min(f[i-1,j],f[i-1,3-j]+t[i])+c[i,j](1<=i<=n) (1<=j<=2).当然,我们要设置好边界条件,其中题目规定一开始使用筷子,所以:f[1,1]:=c[1,1]; 阅读全文
posted @ 2012-12-02 11:30 改名字干什么 阅读(183) 评论(0) 推荐(0) 编辑