??xml version="1.0" encoding="utf-8" standalone="yes"?>99国产欧美精品久久久蜜芽,久久久这里有精品中文字幕,久久久中文字幕http://www.shnenglu.com/JulyRina/welcome to July Rina's blogzh-cnThu, 08 May 2025 23:24:40 GMTThu, 08 May 2025 23:24:40 GMT60POJ 1050 To the Max 最大子矩阵 动态规?/title><link>http://www.shnenglu.com/JulyRina/archive/2015/03/31/210214.html</link><dc:creator>JulyRina</dc:creator><author>JulyRina</author><pubDate>Tue, 31 Mar 2015 15:15:00 GMT</pubDate><guid>http://www.shnenglu.com/JulyRina/archive/2015/03/31/210214.html</guid><wfw:comment>http://www.shnenglu.com/JulyRina/comments/210214.html</wfw:comment><comments>http://www.shnenglu.com/JulyRina/archive/2015/03/31/210214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/JulyRina/comments/commentRss/210214.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/JulyRina/services/trackbacks/210214.html</trackback:ping><description><![CDATA[题意Q求一个n*n矩阵的最大子矩阵?br />解题思\Q类gl情况下的最大连l子丌Ӏ?br />代码Q?span style="font-size: 13px; background-color: #eeeeee;">#include </span><span style="font-size: 13px; background-color: #eeeeee;"><</span><span style="font-size: 13px; background-color: #eeeeee;">cstdio</span><span style="font-size: 13px; background-color: #eeeeee;">></span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all">#include <cstring><br />#include <iostream><br />#include <algorithm><br /><span style="color: #0000FF; ">using</span> <span style="color: #0000FF; ">namespace</span> std;<br /><span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">int</span> maxn = 110;<br /><span style="color: #0000FF; ">int</span> n, a[maxn][maxn], r[maxn][maxn] , f[maxn];<br /><span style="color: #0000FF; ">int</span> main() {<br />    <span style="color: #0000FF; ">while</span>(~scanf("%d", &n)) {<br />        <span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span> i=1;i<=n;i++)<br />            <span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span> j=1;j<=n;j++)<br />                scanf("%d", &a[i][j]);<br />        <span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span> i=1;i<=n;i++)<br />            <span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span> j=1;j<=n;j++)<br />                r[i][j] = r[i-1][j] + a[i][j];<br />        <span style="color: #0000FF; ">int</span> ans = a[0][0];<br />        <span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span> i=1;i<=n;i++)<br />            <span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span> j=i;j<=n;j++)<br />            <span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span> k=1;k<=n;k++) {<br />                <span style="color: #0000FF; ">if</span>(f[k-1] < 0) {<br />                    f[k] = r[j][k] - r[i-1][k];<br />                } <span style="color: #0000FF; ">else</span> {<br />                    f[k] = f[k-1] + r[j][k] - r[i-1][k];<br />                }<br />                <span style="color: #0000FF; ">if</span>(f[k] > ans) ans = f[k];<br />            }<br />        printf("%d\n", ans);<br />    }<br />    <span style="color: #0000FF; ">return</span> 0;<br />}</div><img src ="http://www.shnenglu.com/JulyRina/aggbug/210214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/JulyRina/" target="_blank">JulyRina</a> 2015-03-31 23:15 <a href="http://www.shnenglu.com/JulyRina/archive/2015/03/31/210214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>html面“自动重定向”技?/title><link>http://www.shnenglu.com/JulyRina/archive/2015/03/17/210070.html</link><dc:creator>JulyRina</dc:creator><author>JulyRina</author><pubDate>Tue, 17 Mar 2015 01:07:00 GMT</pubDate><guid>http://www.shnenglu.com/JulyRina/archive/2015/03/17/210070.html</guid><wfw:comment>http://www.shnenglu.com/JulyRina/comments/210070.html</wfw:comment><comments>http://www.shnenglu.com/JulyRina/archive/2015/03/17/210070.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/JulyRina/comments/commentRss/210070.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/JulyRina/services/trackbacks/210070.html</trackback:ping><description><![CDATA[<div>    自动转向(Auto-Redirecting)Q也叫自动重定向。自动蟩转,指当讉K用户登陆到某|站Ӟ自动用戯{向其它网地址的一U技术。{向的|页地址可以是网站内的其它网,也可以是其它|站。通常情况下,览器会收到一个网,该页面含有自动加载一其它|页的代码。该面有可能在服务器端被{换,q样的话Q浏览器只收C个页面,而自动{向往往意味着览器收到的面h自动访问用户送至其它面的功能?/div><div>   对自动{向技?Auto-Redirecting)的合理应用包括:用戯{向到指定览器的|页版本Q当|站的域名变更或删除后将Z转向到新域名 下,{等。但现在q种技术却往往被搜索引擎优化h士用来作为提高网站的搜烦引擎排名的一U手Dc例如,先专门针Ҏ索引擎做一个高度优化的|页Q也是?们通常所说的“桥页”Q然后把q个|页提交l搜索引擎来获得好的排名。但是,当搜索用户通过搜烦引擎的搜索结果列表点击该|页列表q入后,被自动转向?一个用h来无意去讉K的网站地址。搜索引擎常常认动{向的|页是对读者的误导Q所以它会对q种|页或网站施以惩戒,不过对一些自动{向方法它目前q?无法自动出来?/div><div>  <strong>Meta Refresh Tag自动转向?/strong></div><div>  ׃搜烦引擎能够dHTMLQ而Meta tags也是HTMLQ所以对于这U自动{向法Q搜索引擎能够自动检出来。因而无论网站的转向Z什么目的,都很Ҏ被搜索引擎视做对读者的误导而受到惩|。不q,如果跌{延迟旉讄合适,搜烦引擎׃会视之ؓ作弊?/div><div>  面定时h元标?Meta Refresh Tag)只能攑֜HTML代码?lt; HEAD>区里。如下所C:</div><div>  <meta http-equiv="refresh" content="10; url=http://www.baidu.com/"></div><div>  其中?#8220;10”是告诉浏览器在页面加?U钟后自动蟩转到urlq个面?/div><div>  q种Ҏ常可以在论坛中见到。如果在论坛上发信息Q先会看C个确认页面,几秒后会自动重新跌{回当前的论坛面中?/div><div>  从搜索引擎优化的角度出发Q一般不希望自动转向有gq。不q,如果是用Meta Refresh标识q行转向Q一定要注意把gq时间设定成臛_10U以上?/div><div>  <strong>“javascript”自动转向?/strong></div><div>  ׃不能解析javascriptQ所以搜索引擎无法察?自动到)用javascript脚本q行的自动{向。javascript自动重定向脚本可以放在网늚M位置上,如果要求立即跌{Q则可以其攑օ|页源码?lt;head>区内的最上面。用javascript实现跌{的范例如下:</div><div>  <script language="javascript"><!--location.replace("pagename.html")//--></script></div><div>  其中?#8220;pagename.html”指特定的重定向目标地址Q用相对/l对URL地址均可?/div><div>   用javascript实现自动重定向的好处在于Q用h讉K的目标URL不会保留在用h览器的历史记录中Q如果用hq回按钮q回Q则回到蟩转前 的网,而不是包含javascript自动重定向脚本的跌{面Q所以不会出现当用户点击q回按钮后返回至重定向页Q然后该自动蟩转到用户本来想离开 的那个页面的尬情Ş?/div><div>  如果需要,可以把javascript自动重定向脚本存在一个外部文件中Qƈ通过下面的命令行来加载,其中“filename.js”是该外部文g的\径和文g名:</div><div>  <script language="javascript" src="filename.js"></script></div><div>  注意Q若需实现卛_转向Q或不希望h们看到{向前的那个页面,一般常用javascript脚本实现。在q种情况下应javascript脚本攑օHTML源码?lt;HEAD>Z?/div><div>  表单(FORM)自动转向?/div><div>  搜烦引擎?#8220;爬行”E序是不会填写表单的Q所以它们也不会注意到提交表单,因而可以利用表单来实现自动转向(重定?而不让搜索引擎察觉?/div><div>   对于表单Qh们往往很少意识刎ͼ表单的Action参数中包含的URL地址其实正是览器向服务器所h的URL。浏览器会通过向请求的URL地址?加一些格式ؓname=value的参数给予它以特D的对待。在什么都没有的情况下Q浏览器仍旧会ؓ该URL安排hx务器?/div><div>  用javascript脚本可让面开始加载时x交表单。下面是一个用javascript实现表单自动提交Q以及提交表单的范例Q?/div><div>  <script language="javascript"><!--document.myform.submit()//--></script></div><div>  <form name="myform" action="pagename.html" method="get"></form></div><div>  其中“myform”可以是Q意名Uͼ“pagename.html”用相?l对URL地址均可?/div><div>  结</div><div>  <span style="white-space:pre"> </span>如果讉K用户最l看到的是他们想看到的,那么在搜索引擎优化中使用自动转向技术ƈ没有什么不对,也ƈ不是什么不道d的行为。但有些人往往会在利用“自动 跌{”技术,利用“桥页”吸引讉K者,然后把他们送到他们无意览的页面或|站Q这U做法只会引赯问用L反感Q又怎么能够期望讉K量可以有效转化为最l客户呢?</div><img src ="http://www.shnenglu.com/JulyRina/aggbug/210070.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/JulyRina/" target="_blank">JulyRina</a> 2015-03-17 09:07 <a href="http://www.shnenglu.com/JulyRina/archive/2015/03/17/210070.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POSOXU程?/title><link>http://www.shnenglu.com/JulyRina/archive/2015/03/16/210063.html</link><dc:creator>JulyRina</dc:creator><author>JulyRina</author><pubDate>Mon, 16 Mar 2015 13:18:00 GMT</pubDate><guid>http://www.shnenglu.com/JulyRina/archive/2015/03/16/210063.html</guid><wfw:comment>http://www.shnenglu.com/JulyRina/comments/210063.html</wfw:comment><comments>http://www.shnenglu.com/JulyRina/archive/2015/03/16/210063.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/JulyRina/comments/commentRss/210063.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/JulyRina/services/trackbacks/210063.html</trackback:ping><description><![CDATA[<h3>U程是有的</h3> 了解如何正确q用U程是每一个优UE序员必备的素质。线E类gq程。如同进E,U程由内核按旉分片q行理。在单处理器pȝ中,内核使用旉分片来模拟线E的q发执行Q这U方式和q程的相同。而在多处理器pȝ中,如同多个q程Q线E实际上一样可以ƈ发执行?br /> 那么Z么对于大多数合作性Q务,多线E比多个独立的进E更优越呢?q是因ؓQ线E共享相同的内存I间。不同的U程可以存取内存中的同一个变量。所以,E序中的所有线E都可以L写声明过的全局变量。如果曾?fork() ~写q重要代码,׃认识到这个工L重要性。ؓ什么呢Q虽?fork() 允许创徏多个q程Q但它还会带来以下通信问题: 如何让多个进E相互通信Q这里每个进E都有各自独立的内存I间。对q个问题没有一个简单的{案。虽然有许多不同U类的本?IPC (q程间通信Q,但它们都遇到两个重要障碍Q? <ul> <li>强加了某UŞ式的额外内核开销Q从而降低性能?/li> <li>对于大多数情形,IPC 不是对于代码?#8220;自然”扩展。通常极大地增加了E序的复杂性?/li> </ul> 双重坏事: 开销和复杂性都非好事。如果曾lؓ了支?IPC 而对E序大动q戈q,那么您就会真正欣赏线E提供的单共享内存机制。由于所有的U程都驻留在同一内存I间QPOSIX U程无需q行开销大而复杂的长距调用。只要利用简单的同步机制Q程序中所有的U程都可以读取和修改已有的数据结构。而无需数据经由文件描q符转储或挤入紧H的׃n内存I间。仅此一个原因,p以让您考虑应该采用单进E?多线E模式而非多进E?单线E模式?br /> <hr /> <h3>U程是快L</h3> 不仅如此。线E同栯是非常快L。与标准 fork() 相比Q线E带来的开销很小。内核无需单独复制q程的内存空间或文g描述W等{。这p省了大量?CPU 旉Q得线E创建比新进E创建快上十C癑ր。因一点,可以大量使用U程而无需太过于担心带来的 CPU 或内存不뀂?fork() 时导致的大量 CPU 占用也不复存在。这表示只要在程序中有意义,通常可以创建线E?br /> 当然Q和q程一PU程利用多 CPU。如果Y件是针对多处理器pȝ设计的,q就真的是一大特性(如果软g是开放源码,则最l可能在不少q_上运行)。特定类型线E程序(其?CPU 密集型程序)的性能随pȝ中处理器的数目几乎线性地提高。如果正在编?CPU 非常密集型的E序Q则l对惌法在代码中用多U程。一旦掌握了U程~码Q无需使用J琐?IPC 和其它复杂的通信机制Q就能够以全新和创造性的Ҏ解决~码N。所有这些特性配合在一起得多U程~程更有、快速和灉|?br /> <hr /> <h3>U程是可UL?/h3> 如果熟悉 Linux ~程Q就有可能知?__clone() pȝ调用。__clone() cM?fork()Q同时也有许多线E的Ҏ。例如,使用 __clone()Q新的子q程可以有选择地共享父q程的执行环境(内存I间Q文件描q符{)。这是好的一面。但 __clone() 也有不之处。正如__clone() 在线帮助指出Q?br /> “__clone 调用是特定于 Linux q_的,不适用于实现可UL的程序。欲~写U程化应用程序(多线E控制同一内存I间Q,最好用实?POSIX 1003.1c U程 API 的库Q例?Linux-Threads 库。参?pthread_create(3thr)?#8221;<br /> 虽然 __clone() 有线E的许多Ҏ,但它是不可移植的。当然这q不意味着代码中不能用它。但在Y件中考虑使用 __clone() 时应当权衡这一事实。值得庆幸的是Q正?__clone() 在线帮助指出Q有一U更好的替代ҎQPOSIX U程。如果想~写 <strong>可移植的</strong> 多线E代码,代码可运行于 Solaris、FreeBSD、Linux 和其它^収ͼPOSIX U程是一U当然之选?br /> <hr /> <h3>W一个线E?/h3> 下面是一?POSIX U程的简单示例程序:<br /> <pre><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->#include <pthread.h> #include <stdlib.h> #include <unistd.h>  <span style="color: #0000FF; ">void</span> *thread_function(<span style="color: #0000FF; ">void</span> *arg) {   <span style="color: #0000FF; ">int</span> i;   <span style="color: #0000FF; ">for</span> ( i=0; i<20; i++) {     printf("Thread says hi!\n");     sleep(1);   }   <span style="color: #0000FF; ">return</span> NULL; } <span style="color: #0000FF; ">int</span> main(<span style="color: #0000FF; ">void</span>) {   pthread_t mythread;   <span style="color: #0000FF; ">if</span> ( pthread_create( &mythread, NULL, thread_function, NULL) ) {     printf("error creating thread.");     abort();   }   <span style="color: #0000FF; ">if</span> ( pthread_join ( mythread, NULL ) ) {     printf("error joining thread.");     abort();   }   exit(0); }</div> </pre> 要编译这个程序,只需先将E序存ؓ thread1.cQ然后输入:<br /> <pre><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->$ gcc thread1.c -o thread1 -lpthread</div> </pre> q行则输入:<br /> <pre><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->$ ./thread1</div> </pre> <hr /> <h3>理解 thread1.c</h3> <p>thread1.c 是一个非常简单的U程E序。虽然它没有实现什么有用的功能Q但可以帮助理解U程的运行机制。下面,我们一步一步地了解q个E序是干什么的。main() 中声明了变量 mythreadQ类型是 pthread_t。pthread_t cd?pthread.h 中定义,通常UCؓ“U程 id”Q羃写ؓ "tid"Q。可以认为它是一U线E句柄?/p> <p>mythread 声明后(C mythread 只是一?"tid"Q或是将要创建的U程的句柄)Q调?pthread_create 函数创徏一个真实活动的U程。不要因?pthread_create() ?"if" 语句内而受其迷惑。由?pthread_create() 执行成功时返回零而失败时则返回非零|?pthread_create() 函数调用攑֜ if() 语句中只是ؓ了方便地失败的调用。让我们查看一?pthread_create 参数。第一个参?&mythread 是指?mythread 的指针。第二个参数当前?NULLQ可用来定义U程的某些属性。由于缺省的U程属性是适用的,只需该参数设ؓ NULL?/p> <p>W三个参数是新线E启动时调用的函数名。本例中Q函数名?thread_function()。当 thread_function() q回Ӟ新线E将l止。本例中Q线E函数没有实现大的功能。它仅将 "Thread says hi!" 输出 20 ơ然后退出。注?thread_function() 接受 void * 作ؓ参数Q同时返回值的cd也是 void *。这表明可以?void * 向新U程传递Q意类型的数据Q新U程完成时也可返回Q意类型的数据。那如何向线E传递一个Q意参敎ͼ很简单。只要利?pthread_create() 中的W四个参数。本例中Q因为没有必要将M数据传给微不道?thread_function()Q所以将W四个参数设?NULL?/p> <p>您也许已推测刎ͼ?pthread_create() 成功q回之后Q程序将包含两个U程。等一{, 两个 U程Q我们不是只创徏了一个线E吗Q不错,我们只创Z一个进E。但是主E序同样也是一个线E。可以这L解:如果~写的程序根本没有?POSIX U程Q则该程序是单线E的Q这个单U程UCؓ“?#8221;U程Q。创Z个新U程之后E序d有两个U程了?/p> <p>我想此时您至有两个重要问题。第一个问题,新线E创Z后主U程如何q行。答案,ȝE按序l箋执行下一行程序(本例中执?"if (pthread_join(...))"Q。第二个问题Q新U程l束时如何处理。答案,新线E先停止Q然后作为其清理q程的一部分Q等待与另一个线E合q或“q接”?/p> <p>现在Q来看一?pthread_join()。正?pthread_create() 一个线E拆分ؓ两个Q?pthread_join() 两个线E合qؓ一个线E。pthread_join() 的第一个参数是 tid mythread。第二个参数是指?void 指针的指针。如?void 指针不ؓ NULLQpthread_join 线E的 void * q回值放|在指定的位|上。由于我们不必理?thread_function() 的返回|所以将其设?NULL.</p> <p>您会注意?thread_function() ׃ 20 U才完成。在 thread_function() l束很久之前Q主U程已l调用了 pthread_join()。如果发生这U情况,ȝE将中断Q{向睡眠)然后{待 thread_function() 完成。当 thread_function() 完成? pthread_join() 返回。这时程序又只有一个主U程。当E序退出时Q所有新U程已经使用 pthread_join() 合ƈ了。这是应该如何处理在程序中创徏的每个新U程的过E。如果没有合q一个新U程Q则它仍然对pȝ的最大线E数限制不利。这意味着如果未对U程做正的清理Q最l会D pthread_create() 调用p|?/p> <hr /> <h3>无父Q无?/h3> <p>如果使用q?fork() pȝ调用Q可能熟悉父q程和子q程的概c当?fork() 创徏另一个新q程Ӟ新进E是子进E,原始q程是父q程。这创徏了可能非常有用的层次关系Q尤其是{待子进E终止时。例如,waitpid() 函数让当前进E等待所有子q程l止。waitpid() 用来在父q程中实现简单的清理q程?/p> <p>?POSIX U程更有意思。您可能已经注意到我一直有意避免?#8220;父线E?#8221;?#8220;子线E?#8221;的说法。这是因?POSIX U程中不存在q种层次关系。虽然主U程可以创徏一个新U程Q新U程可以创徏另一个新U程QPOSIX U程标准它们视为等同的层次。所以等待子U程退出的概念在这里没有意义。POSIX U程标准不记录Q?#8220;家族”信息。缺家族信息有一个主要含意:如果要等待一个线E终止,必dU程?tid 传递给 pthread_join()。线E库无法为您断定 tid?/p> <p>对大多数开发者来说这不是个好消息Q因会有多个线E的E序复杂化。不q不要ؓ此担忧。POSIX U程标准提供了有效地理多个U程所需要的所有工兗实际上Q没有父/子关p这一事实却ؓ在程序中使用U程开辟了更创造性的Ҏ。例如,如果有一个线E称为线E?1Q线E?1 创徏了称为线E?2 的线E,则线E?1 自己没有必要调用 pthread_join() 来合q线E?2Q程序中其它MU程都可以做到。当~写大量使用U程的代码时Q这可能允许发生有的事情。例如,可以创徏一个包含所有已停止U程的全局“ȝE列?#8221;Q然后让一个专门的清理U程专等停止的线E加到列表中。这个清理线E调?pthread_join() 刚停止的线E与自己合ƈ。现在,仅用一个线E就巧妙和有效地处理了全部清理?/p> <a target="_blank">更多资料</a><img src ="http://www.shnenglu.com/JulyRina/aggbug/210063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/JulyRina/" target="_blank">JulyRina</a> 2015-03-16 21:18 <a href="http://www.shnenglu.com/JulyRina/archive/2015/03/16/210063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ClamAV源码解析之ClamAVq行程http://www.shnenglu.com/JulyRina/archive/2015/03/09/209985.htmlJulyRinaJulyRinaMon, 09 Mar 2015 15:14:00 GMThttp://www.shnenglu.com/JulyRina/archive/2015/03/09/209985.htmlhttp://www.shnenglu.com/JulyRina/comments/209985.htmlhttp://www.shnenglu.com/JulyRina/archive/2015/03/09/209985.html#Feedback0http://www.shnenglu.com/JulyRina/comments/commentRss/209985.htmlhttp://www.shnenglu.com/JulyRina/services/trackbacks/209985.html


JulyRina 2015-03-09 23:14 发表评论
]]>
ClamAV介与安装http://www.shnenglu.com/JulyRina/archive/2015/03/09/209982.htmlJulyRinaJulyRinaMon, 09 Mar 2015 11:41:00 GMThttp://www.shnenglu.com/JulyRina/archive/2015/03/09/209982.htmlhttp://www.shnenglu.com/JulyRina/comments/209982.htmlhttp://www.shnenglu.com/JulyRina/archive/2015/03/09/209982.html#Feedback0http://www.shnenglu.com/JulyRina/comments/commentRss/209982.htmlhttp://www.shnenglu.com/JulyRina/services/trackbacks/209982.htmlClamAV 介以及适用范围
ClamAV是一个在命o行下查毒软gQ因为它不将杀毒作Z要功能,默认只能查出您计机内的病毒Q但是无法清除,臛_删除文g。ClamAV可以工作很多的^CQ但是有数无法支持Q这p取决您所使用的^台的行E度了。另外它主要是来防护一些WINDOWS病毒和木马程序。另外,q是一个面向服务端的Y件?br />

需要反病毒软gQ免费么Q?/h4>
l大多数的Linux都是很先q的Q所以,很少有病毒能够在linux上运行和J衍。而且Q由于目前PC都用的是WindowsQ所以病毒制造者们更愿意去写Windows下的病毒。但是还有很多的原因能致使您使用一些病毒扫描程序的Q比如:
  • 扫描在您计算Z的Windows讑֤
  • 扫描在本地网l中的Windows计算?/li>
  • 扫描您即要传送给别h的文?/li>
  • 扫描您将要发送给别h的EMAIL

ClamAV 安装讄


安装ClamAV

sudo apt-get install clamav
q里有两U的ClamAV供您选择 1.手动Q安装ClamAV的安装包 2.自动Q安装ClamAV-daemon q两U都可以安装ClamAVQ但是要是用上面的ҎQ是手动的?在您安装完成之后Q您可能被程序问及一些问题,比如怎么dU。这需要您选择一个离您比较近的服务器来升U。ClamAV的升U程序是很小的,所以很值得去自动升U?br />

怎么使用ClamAV


q部分将会介l安装之后的使用
升我的病毒?/font>
q行 sudo freshclam.
您将会看见以下说?br />
user@ubuntu:/etc/clamav # sudo freshclam
ClamAV update process started at Wed Apr 27 00:06:47 2005
main.cvd is up to date (version: 31, sigs: 33079, f-level: 4, builder: tkojm)
daily.cvd is up to date (version: 855, sigs: 714, f-level: 4, builder: ccordes)

使用ClamAV扫描我计机中的文g
q行 clamscan.
q里附带一些例?br />
  • 扫描所有用Lȝ录就使用 clamscan -r /home
  • 扫描您计机上的所有文件ƈ且显C所有的文g的扫描结果,׃?clamscan -r /
  • 扫描您计机上的所有文件ƈ且显C有问题的文件的扫描l果Q?׃?clamscan -r --bell -i /
  • 当clamAV扫描完所有文件的时候,会显C如下的cM报告
ClamAV只会L描对于ClamAV可以d的文件?如果您想扫描所有文Ӟ在命令前加上 sudo .
使ClamAV以daemon防护的方式运?/font>
安装clamav-daemon可以了Qclamav-daemon会建立一个名?clamav'的帐Pq是Z可以使ClamAV扫描一些系l文Ӟ比如您的Email存放的地方,您可以添?clamav'些文件或者目录的所有者?br />
如何知道clamav-daemon是否q行?
查看q程列表可以了:
ps ax | grep [c]lamd
如何删除病毒文gQ?/font> 在扫描的时候,您可以添?--remove'
如何知道我现在用的ClamAV版本Q?/font>
执行 clamscan -V
如何使ClamAV按计划自动运?/font>
您可以?at'命o来clamscan和freshclamq行Q比?
at 3:30 tomorrow
at>clamscan -i /home/user > mail user@example.com
at> <CTRL-D>
job 3 at 2015-03-10 03:30
或者编?/etc/crontab 加入以下内容
0 3 * * * root /usr/bin/freshclam --quiet -l /var/log/clamav/clamav.log Q#每天3点升U?br />
更多内容请参?a target="_blank">Ubuntu中文C֌ClamAV专栏?

JulyRina 2015-03-09 19:41 发表评论
]]>
E_婚姻问题?/title><link>http://www.shnenglu.com/JulyRina/archive/2015/03/09/209981.html</link><dc:creator>JulyRina</dc:creator><author>JulyRina</author><pubDate>Mon, 09 Mar 2015 10:57:00 GMT</pubDate><guid>http://www.shnenglu.com/JulyRina/archive/2015/03/09/209981.html</guid><wfw:comment>http://www.shnenglu.com/JulyRina/comments/209981.html</wfw:comment><comments>http://www.shnenglu.com/JulyRina/archive/2015/03/09/209981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/JulyRina/comments/commentRss/209981.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/JulyRina/services/trackbacks/209981.html</trackback:ping><description><![CDATA[问题来自于一?#8220;3分钟怺”zdQ参加活动的有n位男士和n位女士。要求每位男士都要和所有的奛_q行短暂的单独交,qؓ她们打分Q然后按照喜Ƣ程度,Ҏ一位女士进行排序;同样的,每位奛_也要Ҏ有男士进行打分和排序?br /> 在这之后我们为选择{略n位男士和n位女士配寏V得在婚后不会?#8220;”的情况发生?br /> q里?#8220;”是什么意思:<span style="font-size: 10pt; color: red;">囄来自|络Q仅作D例之?/span><br /> <img src="http://www.shnenglu.com/images/cppblog_com/julyrina/E_婚姻问题.png" width="833" height="598" alt="" /><br /> 如果以下两种情况之一发生Q则会发生出轨: <ol> <li>如果W一对夫M的妻子在婚后觉得自己的丈夫没有第二对夫妻中的丈夫帅;W二对夫M的丈夫同样也觉得自己的妻子没有第一对夫M的妻子漂?/li> <li>如果W一对夫M的丈夫在婚后觉得自己的妻子没有第二对夫妻中的d;W二对夫M的妻子同样也觉得自己的丈夫没有第一对夫M的丈夫帅</li> </ol> 解决E_婚姻的算法之一Q?br /> <strong>延迟认可法QGale-Shapley法Q?/strong><br /> 先对所有男士进行落选标讎ͼU其q。当存在自由hQ进行以下操作:<br /> <ol> <li>每一位自q在所有尚未拒l她的女士中选择一位被他排名最优先的女士;</li> <li>每一位女士将正在q求她的自由男与其当前男友进行比较,选择其中排名优先的男士作为其男友Q即若自q优于当前男友Q则抛弃前男友;否则保留其男友,拒绝自由甗?/li> <li>若某男士被其奛_抛弃Q重新变成自q?/li> </ol> 在算法执行期_自由男们<strong>d出击</strong>Q依ơ对最喜欢和次喜欢的女人求爱,一旦被接受Q即失去自由w,q入订婚状态;而女Z则采?strong>“守株待兔”</strong>?strong>“喜新厌旧”</strong>{略Q对前来求爱的男士进行选择Q若该男子比未婚夫强Q则悔婚Q选择新的未婚夫;否则拒绝该男子的求婚。被奛_抛弃的男人重莯pnQ重新拥有了q求女h的权?#8212;—当然Q新的追求对象比不过前女友?br /> q样Q在法执行期间Q每个h都有可能订婚多次——也有可能一开始就扑ֈ了自q最爱,从一而终——每订一ơ婚Q女Z的选择׃更有利,而男Z的品呛_来差。只要男女生的数量相{,则经q多轮求婚,订婚Q悔婚和再订婚之后,每位男女最l都会找到合适的伴G——虽然不一定是自己的最爱(男h没能q到自己的最爱,或女人没有等到自q最爱来q求Q,但绝对不会出?#8220;虽然彼此相爱Q却不能在一?#8221;的悲剧,所有h都会l成E_的婚姅R?img src ="http://www.shnenglu.com/JulyRina/aggbug/209981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/JulyRina/" target="_blank">JulyRina</a> 2015-03-09 18:57 <a href="http://www.shnenglu.com/JulyRina/archive/2015/03/09/209981.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字典树简?/title><link>http://www.shnenglu.com/JulyRina/archive/2015/03/09/209980.html</link><dc:creator>JulyRina</dc:creator><author>JulyRina</author><pubDate>Mon, 09 Mar 2015 10:55:00 GMT</pubDate><guid>http://www.shnenglu.com/JulyRina/archive/2015/03/09/209980.html</guid><wfw:comment>http://www.shnenglu.com/JulyRina/comments/209980.html</wfw:comment><comments>http://www.shnenglu.com/JulyRina/archive/2015/03/09/209980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/JulyRina/comments/commentRss/209980.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/JulyRina/services/trackbacks/209980.html</trackback:ping><description><![CDATA[字典树是一U树形数据结构,他有如下特点Q?br />     每个节点都有固定个数的指向儿子节点的指针Q她的儿子某一个节点(如果存在的话Q包含的信息是该节点的下一个字W?br />     根节点不包含字符Q除根节点外每一个节炚w只包含一个字W; 从根节点到某一节点Q\径上l过的字W连接v来,节点对应的字W串Q?每个节点的所有子节点包含的字W都不相同?br /> <strong>例:</strong>作ؓ一个简单的演示Q这里我们稍微忽略一些细节。下面的q棵树就是一个简单的<u>字典?/u>的例子:<br /><img src="http://www.shnenglu.com/images/cppblog_com/julyrina/字典?1.png" width="696" height="592" alt="" /><br /> <pre><font size="4px">如图所C,如果我们按行存储q些数据Q? <u>apple</u> <u>append</u> <u>and</u> <u>antiy</u> <u>banana</u> <u>band</u> 我们需?+6+3+5+6+4=29 B 的空间? 但是字典树只需?0 B 的空间? q在数据量更大的时候能起到更好的效果?/font></pre> <br /> 字典树能够线性时间范围内实现数据的增删改查?img src ="http://www.shnenglu.com/JulyRina/aggbug/209980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/JulyRina/" target="_blank">JulyRina</a> 2015-03-09 18:55 <a href="http://www.shnenglu.com/JulyRina/archive/2015/03/09/209980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【算法导论(W三版)】第二章学习W记http://www.shnenglu.com/JulyRina/archive/2015/03/07/209956.htmlJulyRinaJulyRinaSat, 07 Mar 2015 07:19:00 GMThttp://www.shnenglu.com/JulyRina/archive/2015/03/07/209956.htmlhttp://www.shnenglu.com/JulyRina/comments/209956.htmlhttp://www.shnenglu.com/JulyRina/archive/2015/03/07/209956.html#Feedback0http://www.shnenglu.com/JulyRina/comments/commentRss/209956.htmlhttp://www.shnenglu.com/JulyRina/services/trackbacks/209956.html 2.3-2 MERGE的改q?br />
void MERGE(int *A, int p,int q, int r) {
    int B[maxn] , i = p , j = q+1 , k = 0;
    while(k < r - p + 1) {
        if(i > q || j <= r && A[i] > A[j]) B[k++] = A[j++];
        else B[k++] = A[i++];
    }
    for(i=0;i<r-p+1;i++) A[p+i] = B[i];
}

2.3-5 二分查找的C++代码
int find(int *a, int l, int r, int value) {
    if(l == r) return l;
    int mid = (l+r) >> 1;
    if(a[mid] >= value) return find(a, l, mid, value);
    else return find(a , mid+1, r , value);
}

*2.3-7 Q这道题其实有O(n)的算法,而且写v来更方便些)q里是O(nlogn)的算?br /> O(nlogn)法思想Q?.首先q行排序Q?.然后枚D每一个小于等于x/2的数S[i]Q二分查扑֯应的x-S[i]是否存在
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1010;
bool findx(int *S,int n, int x,int l,int r) {
    if(l > r) return false;
    if(l ==r) return S[l] == x;
    int mid = (l+r) >> 1;
    if(S[mid] >= x) return findx(S, n, x, l, mid);
    else return findx(S, n, x, mid+1, r);
}
bool check(int *S,int n,int x) {
    for(int i=0;S[i]<=x/2 && i < n;i++) {
        if(findx(S, n, x-S[i], i+1, n-1)) return true;
    }
    return false;
}
int main() {
    int S[1010] , x , n;
    while(~scanf("%d%d" , &n , &x)) {
        for(int i=0;i<n;i++) cin >> S[i];
        if(check(S, n, x)) puts("yes");
        else puts("no");
    }
    return 0;
}

O(n)的方法是在数的范围不是特别大的时候(或者数的范围比较大Q此旉用hash的方法)标记的方法,q里假设数的范围<=10000Qƈ且假设数没有重复的情况下Q其他情늨许改变一下就行:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1010;

bool check(int *S,int n,int x) {
    bool vis[10001] = {0};
    for(int i=0;i<n;i++) vis[x-S[i]] = true;
    for(int i=0;i<n;i++) if(vis[S[i]]) return true;
    return false;
}
int n ,x , S[maxn];
int main() {
    while(~scanf("%d%d" , &n , &x)) {
        for(int i=0;i<n;i++) cin >> S[i];
        if(check(S, n, x)) puts("yes");
        else puts("no");
    }
    return 0;
}

2-4Q逆序对)Q这道题是在归q排序中得到逆序对,具体见代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1010;
int ans;
void merge_sort(int *A, int l,int r) {
    if(l >= r) return;
    int mid = (l+r) >> 1;
    merge_sort(A, l, mid);
    merge_sort(A, mid+1, r);
    int i = l , j = mid+1 ,B[maxn] , k = l;
    while(i <= mid || j <= r) {
        if(i > mid || j <= r && A[j] < A[i]) B[k++] = A[j++] , ans += mid-i+1;
        else B[k++] = A[i++];
    }
    for(i=l;i<=r;i++) A[i] = B[i];
}
int main() {
    int A[maxn] , n;
    while(~scanf("%d" , &n)) {
        for(int i=0;i<n;i++) cin >> A[i];
        ans = 0;
        merge_sort(A, 0, n-1);
        cout << ans << endl;
        //for(int i=0;i<n;i++) cout << A[i] << " "; cout << endl;
    }
    return 0;
}


JulyRina 2015-03-07 15:19 发表评论
]]>
三个入门博弈http://www.shnenglu.com/JulyRina/archive/2015/03/04/209920.htmlJulyRinaJulyRinaWed, 04 Mar 2015 03:16:00 GMThttp://www.shnenglu.com/JulyRina/archive/2015/03/04/209920.htmlhttp://www.shnenglu.com/JulyRina/comments/209920.htmlhttp://www.shnenglu.com/JulyRina/archive/2015/03/04/209920.html#Feedback1http://www.shnenglu.com/JulyRina/comments/commentRss/209920.htmlhttp://www.shnenglu.com/JulyRina/services/trackbacks/209920.htmlQ一Q巴什博奕QBash GameQ:只有一堆n个物品,两个从q堆物品中取物,规定每次臛_取一个,最多取m个。最后取光者得胜? 昄Q如果n=m+1Q那么由于一ơ最多只能取m个,所以,无论先取者拿走多个Q后取者都能够一ơ拿走剩余的物品Q后者取胜。因此我们发C如何取胜的法则:如果n=Qm+1Qr+sQ(rZQ意自然数Qs≤m),那么先取者要拿走s个物品,如果后取者拿走kQ?#8804;m)个,那么先取者再拿走m+1-k个,l果剩下Qm+1Q(r-1Q个Q以后保持这L取法Q那么先取者肯定获胜。MQ要保持l对手留下(m+1Q的倍数Q就能最后获胜? 卻I若n=k*(m+1)Q则后取着胜,反之Q存在先取者获胜的取法?/font> n%(m+1)==0. 先取者必败?/storng> Q二Q威佐夫博奕QWythoff GameQ:有两堆各若干个物品,两个从某一堆或同时从两堆中取同样多的物品,规定每次臛_取一个,多者不限,最后取光者得胜? q种情况下是颇ؓ复杂的。我们用QakQbkQ(ak ≤ bk ,k=0Q?Q?Q?..,n)表示两堆物品的数量ƈU其为局势,如果甲面对(0Q?Q,那么甲已l输了,q种局势我们称为奇异局ѝ前几个奇异局势是Q(0Q?Q、(1Q?Q、(3Q?Q、(4Q?Q、(6Q?0Q、(8Q?3Q、(9Q?5Q、(11Q?8Q、(12Q?0Q? 可以看出,a0=b0=0,ak是未在前面出现过的最自然数,?bk= ak + kQ奇异局势有 如下三条性质Q? 1。Q何自然数都包含在一个且仅有一个奇异局势中? ׃ak是未在前面出现过的最自然数Q所以有ak > ak-1 Q?bk= ak + k > ak-1 + k-1 = bk-1 > ak-1 。所以性质1。成立? 2。Q意操作都可将奇异局势变为非奇异局ѝ? 事实上,若只改变奇异局势(akQbkQ的某一个分量,那么另一个分量不可能在其他奇异局势中Q所以必然是非奇异局ѝ如果QakQbkQ的两个分量同时减少Q则׃其差不变Q且不可能是其他奇异局势的差,因此也是非奇异局ѝ? 3。采用适当的方法,可以非奇异局势变为奇异局ѝ? 假设面对的局势是Qa,bQ,?b = aQ则同时从两堆中取走 a 个物体,变Z奇异局势(0Q?Q;如果a = ak Qb > bkQ那么,取走b - bk个物体,卛_为奇异局势;如果 a = ak Q?b < bk ,则同时从两堆中拿?ak - ab - ak个物?变ؓ奇异局势( ab - ak , ab - ak+ b - akQ;如果a > ak Qb= ak + k,则从W一堆中拿走多余的数量a - ak 卛_Q如果a < ak Qb= ak + k,分两U情况,W一U,a=aj Qj < kQ?从第二堆里面拿走 b - bj 卛_Q第二种Qa=bj Qj < kQ?从第二堆里面拿走 b - aj 卛_? 从如上性质可知Q两个h如果都采用正操作,那么面对非奇异局势,先拿者必胜;反之Q则后拿者取胜? 那么ȝ一个局势(aQbQ,怎样判断它是不是奇异局势呢Q我们有如下公式Q? ak =[kQ?+√5Q?2]Qbk= ak + k Qk=0Q?Q?Q?..,n Ҏ可C取整函? 奇妙的是其中出现了黄金分割数Q?+√5Q?2 = 1?18...,因此,由akQbkl成的矩形近gؓ黄金矩ŞQ由?/Q?+√5Q?Q?#8730;5-1Q?2Q可以先求出j=[aQ?#8730;5-1Q?2]Q若a=[jQ?+√5Q?2]Q那么a = ajQbj = aj + jQ若不等于,那么a = aj+1Qbj+1 = aj+1+ j + 1Q若都不是,那么׃是奇异局ѝ然后再按照上述法则q行Q一定会遇到奇异局ѝ? Q三Q尼姆博奕(Nimm GameQ:有三堆各若干个物品,两个从某一堆取L多的物品Q规定每ơ至取一个,多者不限,最后取光者得胜? q种情况最有意思,它与二进制有密切关系Q我们用QaQbQcQ表C某U局势,首先Q?Q?Q?Q显然是奇异局势,无论谁面对奇异局势,都必然失败。第二种奇异局势是Q?QnQnQ,只要与对手拿C样多的物品,最后都导_0Q?Q?Q。仔l分析一下,Q?Q?Q?Q也是奇异局势,无论Ҏ如何拿,接下来都可以变ؓQ?QnQnQ的情Ş? 计算机算法里面有一U叫做按位模2加,也叫做异或的q算Q我们用W号Q^Q表CU运。这U运和一般加法不同的一Ҏ1^1=0。先看(1Q?Q?Q的按位?加的l果Q? 1 =二进?1 2 =二进?0 3 =二进?1 Q^Q? ——————— 0 =二进?0 Q注意不q位Q? 对于奇异局势(0QnQnQ也一Pl果也是0? M奇异局势(aQbQcQ都有aQ^QbQ^Qc =0? 如果我们面对的是一个非奇异局势(aQbQcQ,要如何变为奇异局势呢Q假?a < b < c,我们只要?c 变ؓ aQ^Qb,卛_,因ؓ有如下的q算l果: aQ^QbQ^Q?aQ^Qb)=(aQ^Qa)Q^Q?bQ^Qb)=0Q^Q?=0。要c 变ؓaQ^QbQ只要从 c中减?c-QaQ^QbQ即可? 莯情况对先取者进行讨论: 异或l果?Q先取者必败,无获胜方法。后取者获胜; l果不ؓ0Q先取者有莯的取法?/font> 拓展Q?/strong> ȝN堆石?两h轮流从Q一堆中d(每次只能取自一?,取最后一颗石子的胜,问先取的人如何获胜? Ҏ上面所qͼN个数异或卛_。如果开始的时候TQ?Q那么先取者必败,如果开始的时候T>0Q那么只要每ơ取出石子得TQ?Q即先取者有莯的方法?/font>

JulyRina 2015-03-04 11:16 发表评论
]]>
多重背包问题http://www.shnenglu.com/JulyRina/archive/2015/02/18/209834.htmlJulyRinaJulyRinaWed, 18 Feb 2015 12:33:00 GMThttp://www.shnenglu.com/JulyRina/archive/2015/02/18/209834.htmlhttp://www.shnenglu.com/JulyRina/comments/209834.htmlhttp://www.shnenglu.com/JulyRina/archive/2015/02/18/209834.html#Feedback0http://www.shnenglu.com/JulyRina/comments/commentRss/209834.htmlhttp://www.shnenglu.com/JulyRina/services/trackbacks/209834.html题目

有NU物品和一个容量ؓV的背包。第iU物品最多有n[i]件可用,每g费用是c[i]Qh值是w[i]。求解将哪些物品装入背包可ɘq些物品的费用d不超q背包容量,且h值d最大?/p>

基本法

q题目和完全背包问题很类伹{基本的方程只需完全背包问题的方程略微一改即可,因ؓ对于WiU物品有n[i]+1U策略:?Ӟ??#8230;…取n[i]件。of[i][v]表示前iU物品恰攑օ一个容量ؓv的背包的最大权|则有状态{ULE:

f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0<=k<=n[i]}

复杂度是O(V*Σn[i])?/p>

转化?1背包问题

另一U好惛_写的基本Ҏ是{化ؓ01背包求解Q把WiU物品换成n[i]?1背包中的物品Q则得到了物品数?#931;n[i]?1背包问题Q直接求解,复杂度仍然是O(V*Σn[i])?/p>

但是我们期望它转化?1背包问题之后能够像完全背包一样降低复杂度。仍然考虑二进制的思想Q我们考虑把第iU物品换成若qg物品Q得原问题中第iU物品可取的每种{略——?..n[i]?#8212;—均能{h于取若干件代换以后的物品。另外,取超qn[i]件的{略必不能出现?/p>

Ҏ是:第iU物品分成若qg物品Q其中每件物品有一个系敎ͼqg物品的费用和价值均是原来的费用和hg以这个系数。ɘq些pL分别?,2,4,...,2^(k-1),n[i]-2^k+1Q且k是满n[i]-2^k+1>0的最大整数。例如,如果n[i]?3Q就这U物品分成系数分别ؓ1,2,4,6的四件物品?/p>

分成的这几g物品的系数和为n[i]Q表明不可能取多于n[i]件的WiU物品。另外这U方法也能保证对?..n[i]间的每一个整敎ͼ均可以用若干个系数的和表C,q个证明可以?..2^k-1?^k..n[i]两段来分别讨论得出,q不难,希望你自己思考尝试一下?/p>

q样将WiU物品分成了O(log n[i])U物品,原问题转化Z复杂度ؓ<math>O(V*Σlog n[i])?1背包问题Q是很大的改q?/p>

下面l出O(log amount)旉处理一件多重背包中物品的过E,其中amount表示物品的数量:

procedure MultiplePack(cost,weight,amount)     
   if cost*amount>=V
      CompletePack(cost,weight)
      return
   integer k=1
   while k<amount
      ZeroOnePack(k*cost,k*weight)
      amount=amount-k
      k=k*2
   ZeroOnePack(amount*cost,amount*weight)

希望你仔l体会这个伪代码Q如果不太理解的话,不妨译成程序代码以后,单步执行几次Q或者头脑加U笔模拟一下,也许׃慢慢理解了?/p>

O(VN)的算?/h2>

多重背包问题同样有O(VN)的算法。这个算法基于基本算法的状态{ULE,但应用单调队列的Ҏ使每个状态的值可以以均摊O(1)的时间求解。由于用单调队列优化的DP已超ZNOIP的范_故本文不再展开讲解。我最初了解到q个Ҏ是在楼天成的“男h八题”qȝ片上?/p>

q里我们看到了将一个算法的复杂度由O(V*Σn[i])改进到O(V*Σlog n[i])的过E,q知道了存在应用出NOIP范围的知识的O(VN)法。希望你特别注意“拆分物品”的思想和方法,自己证明一下它的正性,q将完整的程序代码写出来?/p>

JulyRina 2015-02-18 20:33 发表评论
]]>
þ޾ƷĻ| ƷȾþëƬ| ޾Ʒþþþsm| 99ȶǾƷþþþþ| þþƷһ| ҹƷþ2021| ȫɫƴɫƬѾþþ| ݺɫۺϾþȥ| Ʒþþþþþ| ùþþۺ| ݺݾþۺ˲| þþþþþþþþþƷ | ƷVAþþþþþñ | ƷŮþþþþ2018| Ʒþþþþþþ| þþþþþþþѾƷ| þþþùƷ۲ӰԺ| պŷۺϾþӰԺd3| þ99ֻоƷ| 69Ʒþþþ777| ۺϾþҹAV | ˾þô߽AVһ| þþƷAV| þþƷAV͵| þþþþŹƷ| þþavҰһ| ձvaҹĻþ| þþþþþþþѾƷ| þ޹Ʒһ| þüۺɫۺϰҲȥ | ˳վþ99ȹ| 99þù¶Ʒ| þþùƵ| þùƷһ| һձþþ| þþþƷ| þþþֻоƷ| þۺav| þ91Ʒ91þС| ƷѸþ| ˾ƷѾþþþ|