DP1训练测试考试总结

  考的还行,119分,第六名,RATING加了14。但是还有一些不足之处,现在来分析一下考试题

NO1

 奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行N(1 <= N <= 10,000)分钟的晨跑。在每分钟的开始,贝茜会选择下一分钟是用来跑步还是休息。贝茜的体力限制了她跑步的距离。更具体地,如果贝茜选择在第i分钟内跑步,她可以在这一分钟内跑D_i(1 <= D_i <= 1,000)米,并且她的疲劳度会增加1。不过,无论何时贝茜的疲劳度都不能超过M(1 <= M <= 500)。如果贝茜选择休息,那么她的疲劳度就会每分钟减少1,但她必须休息到疲劳度恢复到0为止。在疲劳度为0时休息的话,疲劳度不会再变动。晨跑开始时,贝茜的疲劳度为0。还有,在N分钟的锻炼结束时,贝茜的疲劳度也必须恢复到0,否则她将没有足够的精力来对付这一整天中剩下的事情。

请你计算一下,贝茜最多能跑多少米。

这一道题的主要问题就在于她的疲劳度在休息的时候是要一直休息下去的(不然我早做完了,还至于才考第六吗?)要怎样才能一直休息下去且能找到最优值呢?很简单,就只需要设f[i][j]的意思为疲劳值i时为j的最大距离便可。

上代码:


应该很好理解

NO2

 Farmer John以及他的N(1 <= N <= 2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏。

 由于奶牛不会划船,在整个渡河过程中,FJ必须始终在木筏上。在这个基础上,木筏上的奶牛数目每增加1,FJ把木筏划到对岸就得花更多的时间。

 当FJ一个人坐在木筏上,他把木筏划到对岸需要M(1 <= M <= 1000)分钟。当木筏搭载的奶牛数目从i-1增加到i时,FJ得多花M_i(1 <= M_i <= 1000)分钟才能把木筏划过河(也就是说,船上有1头奶牛时,FJ得花M+M_1分钟渡河;船上有2头奶牛时,时间就变成M+M_1+M_2分钟。后面的依此类推)。那么,FJ最少要花多少时间,才能把所有奶牛带到对岸呢?当然,这个时间得包括FJ一个人把木筏从对岸划回来接下一批的奶牛的时间。

这一道题是我再考是就AC了的题目,它有很多种做法,如完全背包,资源分配等。而我用的连我自己都不知道是什么(额,很尴尬)我的f[i]表示的是前i头牛的最小花费值


上代码:


NO3

这是一个很无趣的数字游戏,给你n个整数,再给一个目标和sum。你可以调整n个数中任意一个数的大小,但是要让调整好的n个整数的平方和和sum相等。

比如有3个数 1 3 3。目标和是6,那么我们可以把1变成2,把两个3都变成1,这样就完成调整。但是为了提高难度,我们规定假设某个数为A_i,调整为B_i,那么要花费的代价是|A_i-B_i|*|A_i-B_i|。

那么上面的算法花费的代价就是9.当然肯定会有更小代价的算法。

现在问题提出来,把n个数调整到位,最小花费的代价是多少?

如果存在无解的情况,输出”-1”。

一题资源分配(背包里的),先把变为某一值的代价求出,然后f[i][j]表示组成平方和是j的最小代价

上代码


谢谢大家!

猜你喜欢

转载自blog.csdn.net/qq_40669010/article/details/79979138