一切来自这个比赛的安利..
javascript用 ! [] + - * 表示0~1000的数字
编码长度不超过75个字符
样例:
+![]
+!![]
然后找到这个博客
发现了一种jother编码的神奇东西
[]
是一个匿名函数,+
把它变成0,!
把它变成false……
//chrome console测试
[]
> []
+[]
> 0
![]
> false
那么对于![]
再加一个!就应该是true了,然后在加+便是1
当然在+[]
前面加一个!也能变成1
//chrome console测试
!+[]
> true
+!+[]
> 1
+!![]
> 1
一生万物
//前文提及博客通过加法生成的0~9
"+[]", //0
"+!![]", //1
"!![]+!![]", //2
"!![]+!![]+!![]", //3
"!![]+!![]+!![]+!![]", //4
"!![]+!![]+!![]+!![]+!![]", //5
"!![]+!![]+!![]+!![]+!![]+!![]", //6
"!![]+!![]+!![]+!![]+!![]+!![]+!![]", //7
"!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]", //8
"!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]" //9
但是对于这道题还是有字数限制…
75个字符…用sublime对于上面的测试了一下9就有45个字符了
话说google到一个网站….它使用了括号生成jother编码
尝试了一下是可以吧()
换成[]
的
所以一个思路就是通过拼接来实现三位数
[+!![]+[]]+[!![]+!![]+[]]+[!![]+!![]+!![]+[]]
"123"
但是前文已经提到,9就有45个字符了,那999通过这样的转换只能是
[!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[]]+[!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[]]+[!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[]]
长度刚好150,是原来的两倍恍恍惚惚
然后还可以用乘法符号和减法
所以999可以表示成1000-1
[+!![]+[]]+[+[]+[]]+[+[]+[]]+[+[]+[]]-[+!![]+[]]
这样就只有49个字符啦= =
明显还是C++可以实现的…
乘以10还不如加0…
2*2生成的4比4要长…(因为要加括号)
2*3生成的6比1+…+1生成的6短(一个字节)
[!![]+!![]]*[!![]+!![]+!![]]
2*4生成的8比1+…+1生成的8短
[!![]+!![]]*[!![]+!![]+!![]+!![]]
34
3*3生成的9比1+1+…+1生成的9要短
[!![]+!![]+!![]]*[!![]+!![]+!![]]
只有35个字符
10-1,10-2,10-3显然更小
[+!![]]+[+[]]-[+!![]+!![]+!![]]
[+!![]]+[+[]]-[+!![]+!![]]
28
[+!![]]+[+[]]-+!![]
20
所以下面总结一下构造
//0,1,2,3,4,5没有什么技巧
+[] //0
+!![] //1
!![]+!![] //2
!![]+!![]+!![] //3
!![]+!![]+!![]+!![] //4
!![]+!![]+!![]+!![]+!![] //5
//6 = 2 * 3
[!![]+!![]]*[!![]+!![]+!![]] //6
//7 = 10 - 3 8 = 10 - 2,9 = 10 - 1
[+!![]]+[+[]]-[+!![]+!![]+!![]] //7
[+!![]]+[+[]]-[+!![]+!![]] //8
[+!![]]+[+[]]-+!![] //9
//10 = [1] + 0
加法不需要加[]
cost=1
减法需要在后面加括号
dp[a][b] = dp[a]+dp[b]+3
b 等于1时候+1
拼接/乘法的时候需要在外面加[]
来实现
所以这还是一道字符串处理的动态规划= =
但是看上去这样还是不能满足75的要求,所以这里需要分解因数= =
比如777 = +[[[+!![]]+[+[]]-[+!![]+!![]+!![]]]+[[+!![]]+[+[]]-[+!![]+!![]+!![]]]+[[+!![]]+[+[]]-[+!![]+!![]+!![]]]]
=[[+!![]]+[+[]]-[+!![]+!![]+!![]]]*[[+!![]]+[+!![]]+[+!![]]]
第一个分解长度是105第二个是7*111 长度是59,满足要求
有空补上接下来的DP步骤,感觉是一个完全背包的多次优化…