能力值:
( LV6,RANK:90 )
|
-
-
2 楼
我假设胡萝卜每次都得吃整数个算的:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int f[20000];
int main() {
int n;
scanf("%d",&n);
f[0] = n;
for (int i = 1; i<= 1000; ++i)
for (int j = 0; j < i; ++j) {
int t = (f[j] - 1) / 1000 + 1;
f[i] = max(f[i], f[j]-(2*t-1)*(i-j));
}
printf("%d\n", f[1000]);
return 0;
}
结果:
10000剩1398
4000剩676
好吧懒得追究细节了,方法是DP,不过是O(n^2)的,对于公里数超过10000就会有点吃力吧
顺便说一下,那个邀请码大概是填UpK2010吧
最后在应要求普及一点算法知识:
这个做法的思想基础叫作动态规划(DP),好吧细节不解释了
f[i]表示驴子把所有的萝卜都运i公里的话,最多还能剩多少萝卜。
f[0]表示运了0公里,当然是剩n个(这个叫做边界条件)
对于i>0,我们要计算f[i],就假设他是从j公里运过来的,那么就剩f[j] - 驴子吃掉的。 我们从所有<i的j中选出最大的那个,就可以了。(这个属于递推方法)
通过以上两点,就可以得到结果了。
动态规划求解的问题一般必须满足无后效性,表现在这个问题中就是说,不管我用什么方法把这f[j]个萝卜运到j处,对以后产生影响的只有这个萝卜数了,所以多多益善:)
那么就补充到这里,有兴趣的朋友可以参考算法设计的相关书籍(最推荐的当属算法导论了)
|
能力值:
( LV9,RANK:610 )
|
-
-
3 楼
其实你没有回答我的问题
你的那个解法真看不懂耶~!
稍稍文字说明下呗
另外一个让人蛋疼的问题
Debugman的一个问题 “锄禾“下面是什么?
你们说是什么耶?到底是什么呢 反正那天我真的蛋疼了!
|
能力值:
( LV6,RANK:90 )
|
-
-
4 楼
好吧我从高1开始做算法题都做到大学了,其实我们的要求一般比较严,最优化问题都必须和标准答案一模一样。
你这个蛋疼的问题我怎么什么都看不懂
|
能力值:
( LV9,RANK:610 )
|
-
-
5 楼
大学之前我还不会开机呢!
关于那个Debugman的蛋疼问题,我截图给你看
|
能力值:
( LV9,RANK:610 )
|
-
-
6 楼
顺便说一下,那个邀请码大概是填UpK2010吧
是的,是我眼拙 一直在填 Upk2010 结果我就杯具了!
是这小k和大K的问题 我是猪!
|
能力值:
( LV9,RANK:610 )
|
-
-
7 楼
回家吃饭去,今天心情很郁闷! 
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
汗。。。那个问题。。。锄禾下面是当午。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
传说中练九阳神功的男子!
|
能力值:
( LV9,RANK:610 )
|
-
-
10 楼
哇,楼上是处女耶!
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
你太纯洁了.
|
|
|