主题:第72次编程比赛结果
雨中飞燕 [专家分:18980] 发布于 2008-09-23 12:07:00
我浏览一次后,还没打算编译测试前,已经决定好了谁是冠军了,
因为除了那一份代码有测试的价值外,其它的我已经没有兴趣去试验了
不过,有点可惜的是,冠军的代码和我自己的代码效率差别不大
偶也想看看n<=30有15%左右提升,n>39有一倍提升的代码,能发上来看看吗?
顺便可以的话你说明你优化了些什么
PS.前两天有点忙,搞得忘记来结帖了。。。
最后更新于:2008-09-23 12:09:00
回复列表 (共24个回复)
21 楼
雨中飞燕 [专家分:18980] 发布于 2008-09-25 16:07:00
[quote]这次错过了。刚刚看了下题,想到一个方法。宽搜
节点定义的方式是
struct node
{
int currentvalue;//扩展到当前位的值
int sum;//扩展到当前位的各位数的n次方和
};
初始化的时候,把一位的情况放到队列里面(不包括0),然后扩展一个节点后面添加位数0---k-1.
剪枝条件为current*k > sum+(k-1)^n;
实现方式非常简单,不知道效率怎么样。[/quote]
你这个要考虑的不是效率,而是空间,你够用么?
23 楼
mo_0820 [专家分:50] 发布于 2008-09-27 14:12:00
我认为这个题目的处理要考虑以下两点:
一:
n次k进制的水仙花数的最大值的位置(大概),例如4次10进制的,由于9的4次方是6561这样找到10000就差不多足够了。
二:
由于实际判断的数是慢慢递增的,而水仙花数的判断条件是幂方增加的,举个例子这样能说清楚:以4次10进制为例,1~9这组数只要算到2就行了,因为2的4次方是16>2;10~19这组数只要算到12就行了,因为1+16>12;20~19这组数只要算到22就行了,因为16+16>22;应该很清楚了吧。
这样应该能加快计算,我也挺喜欢编程的,但暂时还自己没有电脑,所以只能提点建议。等以后有条件了,再和大家切磋切磋。
24 楼
雨中飞燕 [专家分:18980] 发布于 2008-09-27 14:43:00
[quote]我认为这个题目的处理要考虑以下两点:
一:
n次k进制的水仙花数的最大值的位置(大概),例如4次10进制的,由于9的4次方是6561这样找到10000就差不多足够了。
二:
由于实际判断的数是慢慢递增的,而水仙花数的判断条件是幂方增加的,举个例子这样能说清楚:以4次10进制为例,1~9这组数只要算到2就行了,因为2的4次方是16>2;10~19这组数只要算到12就行了,因为1+16>12;20~19这组数只要算到22就行了,因为16+16>22;应该很清楚了吧。
这样应该能加快计算,我也挺喜欢编程的,但暂时还自己没有电脑,所以只能提点建议。等以后有条件了,再和大家切磋切磋。[/quote]
你继续考虑吧,还远不足
我来回复