为防止广告,目前nocow只有登录用户能够创建新页面。如要创建页面请先登录/注册(新用户需要等待1个小时才能正常使用该功能)。

USACO/zerosum

来自NOCOW
跳转到: 导航, 搜索

目录

[编辑] 分析

DFS

每层只有3个状态,层数最多只有8层,不会超时。(令我非常惊讶的是,没有任何剪枝的DFS最后3-9每个结果都是0.000秒杀。。。表示自己运行时明显有等待时间的。。。难道是USACO电脑太好了?)

枚举时按照' ','+','-'的顺序添加当前空格处的运算符,保证输出的顺序正确。 用sum记录当前加和,用last记录当前的连续数,就是之前添' '连成的数。

' ':sum=sum-last+last*10+s+1(last>0);sum=sum-last+last*10-s-1(last<0); 
     last=last*10+s+1(last>0);last=last*10-s-1(last<0)
'+':sum=sum+s+1;last=s+1
'-':sum=sum-s-1;last=-s-1


另一种方法是最后计算是否为0.

注意:PASCAL自带的字符串函数val(s:string;var t:longint)中,s[1]可以为'+'或'-',所以在计算时显得异常简单.(注意'+','-'是首位,表示正负)

[编辑] 通过三进制枚举

实际上,我们也可以用三进制枚举,从3^(n-1)到1,每个数都转化为三进制。2表示' ',1表示'+',0表示'-'。 具体见两个pascal代码。

[编辑] 参考代码

C
C++
Pascal
Java

[编辑] 引用

[1]

[2]

个人工具