已知分区问题是NP难的.根据问题的具体情况,我们可以尝试动态编程或一些启发式方法,如差分(也称为Karmarkar-Karp算法).
后者似乎对于具有大数字的实例(使动态编程难以处理)非常有用,但并不总是完美的.什么是找到更好的解决方案的有效方法(随机,禁忌搜索,其他近似)?
PS:问题背后有一些故事.自2004年7月以来,SPOJ就迎来了挑战Johnny Goes Shopping.到目前为止,1087个用户已经解决了这个挑战,但只有11个用户得分高于正确的Karmarkar-Karp算法(目前得分,Karmarkar-Karp给出了11.796614)点).怎么做得更好?(最受欢迎的已接受提交支持的答案,但请不要透露您的代码.)
附加规则:
1.程序应从标准输入读取并写入标准输出.
2.程序应该向调用系统/程序返回零.
3.程序应该使用gcc -O2 -lm -s -fomit-frame-pointer编译和运行.
挑战有一些历史:2009年9月在波兰编程竞赛博客上宣布了短期实施的要求.比赛结束后,最短的代码是81个字符长.后来第二次调用甚至更短的代码,并在年后matix2267 以78字节发布了他的解决方案:
main(c){read(0,&c,1)?c-41&&main(c-40&&(c%96<27||main(c),putchar(c))):exit(0);}
Run Code Online (Sandbox Code Playgroud)
有人让它更短或证明这是不可能的吗?
我正在为.Net程序员寻找简单的一步一步的通信教程.在一些Google查询之后,我在net-informations.com找到了"CSharp Communications"代码集.只要我到达" 如何使用C#聊天服务器 "示例,它看起来就很不错.
作者建议使用HashTable容器的多线程服务器将所有连接保留在服务器端的共享内存中.根据MSDN文档,用于广播消息的TcpClient和NetworkStream类不是线程安全的,而该示例使用来自多个服务器线程的类.
我的问题是:
如图所示 这里,创建在运行时不能被拘留的字符串。
但是,以下代码:
class Program {
static void Main(string[] args)
{
string s1 = "Programming Is Fun";
string s3 = s1.ToString();
Console.WriteLine(Object.ReferenceEquals(s1, s3));
}
}
Run Code Online (Sandbox Code Playgroud)
给出(VS 2015):
True
Run Code Online (Sandbox Code Playgroud)
那么,它是否以某种方式指定了在运行时生成哪些字符串?
顺便提一句:
编码:
using System;
using System.Text;
class Program {
static void Main(string[] args)
{
string s1 = "hop";
StringBuilder s2 = new StringBuilder(s1);
string s3 = s2.ToString();
Console.WriteLine(Object.ReferenceEquals(s1, s3));
}
}
Run Code Online (Sandbox Code Playgroud)
给出(VS 2015):
False
Run Code Online (Sandbox Code Playgroud)
与单声道(版本 4.0.2)相反,它给出
True
Run Code Online (Sandbox Code Playgroud)
请参阅工作示例。
给出一个代码
use Switch;
my $var1x = "one";
switch ($var1x) {
case "one" { print "Why so small?\n"}
case "two" { print "Why so small?\n"}
case "three" { print "That is ok.\n"}
case "four" { print "That is ok.\n"}
}
Run Code Online (Sandbox Code Playgroud)
我想将类似案件的实施分组.有任何建议如何在Perl中正确编写它?