首页
社区
课程
招聘
胡萝卜问题
发表于: 2010-2-5 18:26 4794

胡萝卜问题

2010-2-5 18:26
4794
一个商人骑一头驴要穿越1000公里长的沙漠,去卖10000根胡萝卜。
已知驴一次性可驮1000根胡萝卜,但每走一公里又要吃掉一根胡萝卜。
问:商人共可卖出多少胡萝卜?
ps.来自Upk的帖子
本人回复帖子的时候来了这么一句话验证:
[第一帖问题验证防广告,以后就没有了]UpK? ->[注意区分大小写,请回答(Answer):UpK2010]
本人愚昧实在不知道如何填写这个验证码,请高手指教!


下面是我的思路:
#define COUNT 10000  表示胡萝卜数

#include "stdafx.h"
#define COUNT 10000
int main(int argc, char* argv[])
{
	int iCount = COUNT;
	int nJ = (int)(iCount/1000)*2-1;
	float a= 0.0;
	int cishu = 0;
	for (int i=nJ; ; i-=2)
	{
		a += (float)(1.0/i);
		cishu++;
		if(a>1.0)
		{
			a -=(float)(1.0/i);
			break;
		}
	}
	cishu--;
	iCount -= cishu*1000;
	a = (float)1.0-a;

	printf("还剩下的胡萝卜数:%d\n", iCount - (int)(a*1000.0*(iCount/1000*2-1)));
	return 0;
}

解释比较麻烦  简单解释下
第一个中转点是这样算出来的:根据胡萝卜总数,让驴子把胡萝卜完全搬到第一个点的时候刚好消费驴

子最大负载数的胡萝卜数,至于为什么解释不清楚。 下一个点也这样算,一直到最后一次全部搬完都用

不到驴子的最大负载的胡萝卜数就结束了  
本题的答案是 剩余1400
如果胡萝卜总数为 4000   剩余 677
ps.有人的答案可能会出现少一个或者多一个情况  本人认为这种细节就没必要讨论了  因为这是一个最

优化的问题 没必要追的那么仔细

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 424
活跃值: (10)
能力值: ( 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处,对以后产生影响的只有这个萝卜数了,所以多多益善:)
那么就补充到这里,有兴趣的朋友可以参考算法设计的相关书籍(最推荐的当属算法导论了)
2010-2-5 18:43
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
3
其实你没有回答我的问题
你的那个解法真看不懂耶~!
稍稍文字说明下呗

另外一个让人蛋疼的问题
Debugman的一个问题  “锄禾“下面是什么?
你们说是什么耶?到底是什么呢  反正那天我真的蛋疼了!
2010-2-5 18:45
0
雪    币: 424
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
好吧我从高1开始做算法题都做到大学了,其实我们的要求一般比较严,最优化问题都必须和标准答案一模一样。

你这个蛋疼的问题我怎么什么都看不懂
2010-2-5 18:50
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
5
大学之前我还不会开机呢!
关于那个Debugman的蛋疼问题,我截图给你看
上传的附件:
2010-2-5 18:55
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
6
顺便说一下,那个邀请码大概是填UpK2010吧

是的,是我眼拙 一直在填  Upk2010  结果我就杯具了!
是这小k和大K的问题  我是猪!
2010-2-5 18:56
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
7
回家吃饭去,今天心情很郁闷!
2010-2-5 18:58
0
雪    币: 401
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
汗。。。那个问题。。。锄禾下面是当午。。。
2010-2-5 19:14
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
传说中练九阳神功的男子!
2010-2-5 23:51
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
10
哇,楼上是处女耶!
2010-2-6 08:11
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
你太纯洁了.
2010-2-6 09:07
0
游客
登录 | 注册 方可回帖
返回
//