﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-C小加-随笔分类-解题报告</title><link>http://www.cppblog.com/cxiaojia/category/18042.html</link><description>厚德 博学 求真 至善
The bright moon and breeze</description><language>zh-cn</language><lastBuildDate>Mon, 07 May 2012 13:29:31 GMT</lastBuildDate><pubDate>Mon, 07 May 2012 13:29:31 GMT</pubDate><ttl>60</ttl><item><title>Ural 1880. Psych Up's Eigenvalues（水题）</title><link>http://www.cppblog.com/cxiaojia/archive/2012/05/07/173885.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Mon, 07 May 2012 03:15:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/05/07/173885.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/173885.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/05/07/173885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/173885.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/173885.html</trackback:ping><description><![CDATA[<div><p style="margin-top:4.8pt;margin-right:0cm;margin-bottom:6.0pt;margin-left: 0cm;line-height:14.25pt;background:white">题意：<span style="font-size: 10pt; ">有</span><span style="font-size: 10pt; font-family: Arial, sans-serif; ">3</span><span style="font-size: 10pt; ">个人</span></p>  <p style="margin-top: 4.8pt; margin-right: 0cm; margin-bottom: 6pt; margin-left: 0cm; line-height: 14.25pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: white; background-position: initial initial; background-repeat: initial initial; "><span style="font-size: 10pt; ">每个人有</span><span style="font-size: 10pt; font-family: Arial, sans-serif; ">n</span><span style="font-size: 10pt; ">个特征值</span><span style="font-size: 10pt; font-family: Arial, sans-serif; ">(1 &#8804; n &#8804; 4 000)</span></p>  <p style="margin-top: 4.8pt; margin-right: 0cm; margin-bottom: 6pt; margin-left: 0cm; line-height: 14.25pt; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: white; background-position: initial initial; background-repeat: initial initial; "><span style="font-size: 10pt; ">求每个人都有的特征值有几个？</span><span style="font-size: 10pt; font-family: Arial, sans-serif; ">(</span><span style="font-size: 10pt; ">特征值</span><span style="font-size: 10pt; font-family: Arial, sans-serif; "> &#8804; 10^9)</span></p>  <p><span style="font-family:宋体;">分析：我把所有的数据放到一个数组里排序，有连续三个相同的话就是一个共同特征。<br /><br /></span><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&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;algorithm&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">int</span>&nbsp;arr[12003];<br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;n);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i=0;i&lt;n;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;arr[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;n);<br />&nbsp;&nbsp;&nbsp;&nbsp;n+=i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(;i&lt;n;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;arr[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;n);<br />&nbsp;&nbsp;&nbsp;&nbsp;n+=i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(;i&lt;n;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;arr[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;sort(arr,arr+n);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cnt=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=0;j&lt;n-2;++j)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(arr[j]==arr[j+1]&amp;&amp;arr[j+1]==arr[j+2])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++cnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",cnt);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div></p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/173885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-05-07 11:15 <a href="http://www.cppblog.com/cxiaojia/archive/2012/05/07/173885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ural 1787. Turn for MEGA（水题）</title><link>http://www.cppblog.com/cxiaojia/archive/2012/05/07/173883.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Mon, 07 May 2012 02:51:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/05/07/173883.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/173883.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/05/07/173883.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/173883.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/173883.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">题意：</span>k<span style="font-family:宋体;">为每分钟可以通行的最大车辆。一共有</span>n<span style="font-family:宋体;">个分钟，给出每分钟新出现的车辆数，问过了</span>n<span style="font-family:宋体;">分钟后还剩下多少辆车没有通行。</span></p>  <p><span style="font-family:宋体;">分析：直接模拟就可以了。<br /><br /></span><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&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;k,n;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d&nbsp;%d",&amp;k,&amp;n);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;sum=0,val;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;val);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum+=val;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum=sum&gt;k?sum-k:0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",sum);<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div></p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/173883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-05-07 10:51 <a href="http://www.cppblog.com/cxiaojia/archive/2012/05/07/173883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Uestc 1652 Grab a hole(贪心+枚举)</title><link>http://www.cppblog.com/cxiaojia/archive/2012/05/06/173821.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Sun, 06 May 2012 06:50:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/05/06/173821.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/173821.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/05/06/173821.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/173821.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/173821.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">很遗憾比赛的时候没做出来，当时用贪心的方法写过，可是思路有问题，</span>WA<span style="font-family:宋体;">了。解题报告上面只说是贪心，但具体怎么写没有说。于是我就尝试了一些贪心想法，终于</span>AC<span style="font-family:宋体;">。24ms的时间还挺靠前的。</span></p>  <p>&nbsp;题意：N个老鼠洞和N个老鼠，老鼠有个兴趣区间[s,t]，就是说老鼠会对这个范围内的洞感兴趣，他们会占领自己感兴趣的洞。有一个兴趣波动范围K，求一个最小的K使得所有的老鼠都能占领自己感兴趣的洞。</p>  <p><span style="font-family:宋体;">分析：按照左边区间从小到大排序，然后开始枚举每一个区间，从区间右边的端点开始放，如果那个位置已经有老鼠的话，就向前遍历一遍看前边的洞是否已满，没有满的话就向前遍历，遇到左端点的值小于这个老鼠的左端点值时，就交换，直到遇到一个空洞。如果满了的话就向后遍历，遇到右端点大于这个老鼠的右端点时，就交换，直到遇到一个空洞。遍历的时候要时刻判断</span>K<span style="font-family:宋体;">的值，如果到达不了那个范围，就增大</span>K<span style="font-family:宋体;">的值。<br /><br /></span></p><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&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;cstring&gt;<br />#include&lt;algorithm&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><br />typedef&nbsp;<span style="color: #0000FF; ">struct</span><br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;s,t;<br />}ract;<br />ract&nbsp;r[503];<br /><span style="color: #0000FF; ">int</span>&nbsp;line[503];<br /><span style="color: #0000FF; ">bool</span>&nbsp;cmp(ract&nbsp;r1,ract&nbsp;r2)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(r1.s==r2.s)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;r1.t&lt;r2.t;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;r1.s&lt;r2.s;<br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t,pos=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;t);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(t--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(line,-1,<span style="color: #0000FF; ">sizeof</span>(line));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;n);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d&nbsp;%d",&amp;r[i].s,&amp;r[i].t);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(r,r+n,cmp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;k=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(line[r[i].t]==-1)<span style="color: #008000; ">//</span><span style="color: #008000; ">如果右端点的洞是空的</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line[r[i].t]=i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;flag=0,temp=i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(r[i].t&gt;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=r[i].t-1;j&gt;=1;--j)<span style="color: #008000; ">//</span><span style="color: #008000; ">向前遍历，是否已住满</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(line[j]==-1)&nbsp;{flag=1;<span style="color: #0000FF; ">break</span>;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(flag==1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=r[i].t;j&gt;=1;--j)<span style="color: #008000; ">//</span><span style="color: #008000; ">如果没有住满就向前遍历</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(line[j]==-1)<span style="color: #008000; ">//</span><span style="color: #008000; ">遇到空洞就住下</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line[j]=temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(r[temp].s&gt;j)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k=max(k,r[temp].s-j);<span style="color: #008000; ">//</span><span style="color: #008000; ">更新K值</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(r[line[j]].s&lt;r[temp].s)<span style="color: #008000; ">//</span><span style="color: #008000; ">如果当前洞中的老鼠的左端点小于移动的老鼠的左端点，就交换</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;tmp2=line[j];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line[j]=temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(r[temp].s&gt;j)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k=max(k,r[temp].s-j);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp=tmp2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=r[i].t;j&lt;=n;++j)<span style="color: #008000; ">//</span><span style="color: #008000; ">如果已经住满就向后遍历</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(line[j]==-1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line[j]=temp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(r[temp].t&lt;j)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k=max(k,j-r[temp].t);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(r[line[j]].t&gt;r[temp].t)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;tmp2=line[j];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line[j]=temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(r[temp].t&lt;j)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k=max(k,j-r[temp].t);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp=tmp2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Case&nbsp;#%d:&nbsp;%d\n",++pos,k);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><p>&nbsp;</p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/173821.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-05-06 14:50 <a href="http://www.cppblog.com/cxiaojia/archive/2012/05/06/173821.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 3667 NYOJ 534 hotel （区间合并线段树）</title><link>http://www.cppblog.com/cxiaojia/archive/2012/05/04/173681.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Fri, 04 May 2012 12:05:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/05/04/173681.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/173681.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/05/04/173681.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/173681.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/173681.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">区间合并的线段树题，也是我的第一个区间合并。</span></p>  <p style="margin-top:0cm;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm; line-height:20.4pt;background:white;vertical-align:baseline">题意（转）：<span style="font-size:11.5pt; font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;;color:#333333">Bessie</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;; color:#333333">等牛到加拿大的桑德贝去增长文化修养外带观赏苏必利尔湖的阳光。按照导游的介绍，</span><span style="font-size:11.5pt; font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;;color:#333333">Bessie</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;; color:#333333">选择了著名的</span><span style="font-size:11.5pt;font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;; color:#333333">Cumberland</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;;color:#333333">大街上的</span><span style="font-size:11.5pt; font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;;color:#333333">Bullmoose</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;; color:#333333">宾馆作为居住的地点。</span></p>  <p style="margin:0cm;margin-bottom:.0001pt;line-height:20.4pt;background:white; vertical-align:baseline"><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;;color:#333333">这座巨型宾馆在一条超长走廊上有</span><span style="font-size:11.5pt; font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;;color:#333333">N</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;; color:#333333">（</span><span style="font-size:11.5pt;font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;; color:#333333">1 &#8804; N &#8804; 50000</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;;color:#333333">）个排成一排的房间，每个房间都能欣赏到苏必利尔湖的好景色。现在所有的房间都是空的。</span></p>  <p style="margin-top:0cm;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm; line-height:20.4pt;background:white;vertical-align:baseline"><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;; color:#333333">现在</span><span style="font-size:11.5pt;font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;; color:#333333">Bessie</span><span style="font-size: 11.5pt; ">等旅客们正在不断地发出订房和退房要求。你需要接受</span><span style="font-size:11.5pt; font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;;color:#333333">M</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;; color:#333333">（</span><span style="font-size:11.5pt;font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;; color:#333333">1 &#8804; M &lt; 50000</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;; color:#333333">）条指令：</span></p>  <p style="margin-top:0cm;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm; line-height:20.4pt;background:white;vertical-align:baseline"><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;; color:#333333">每条指令的第一个数字为</span><span style="font-size:11.5pt;font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;; color:#333333">1</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;;color:#333333">或</span><span style="font-size:11.5pt; font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;;color:#333333">2</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;; color:#333333">。如果是</span><span style="font-size:11.5pt;font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;; color:#333333">1</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;;color:#333333">，后面将有一个整数</span><span style="font-size:11.5pt; font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;;color:#333333">D</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;; color:#333333">表示顾客要预定的房间数。注意，这些房间必须是连续的。如果能够满足旅客的订房要求，输出满足要求的第一个房间的编号（例如，要订房</span><span style="font-size:11.5pt; font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;;color:#333333">6</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;; color:#333333">间，输出</span><span style="font-size:11.5pt;font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;; color:#333333">3</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;;color:#333333">表示</span><span style="font-size:11.5pt; font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;;color:#333333">3, 4, 5, 6, 7, 8</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;; color:#333333">是满足要求的），这样的编号必须是可能的编号里面最靠前的。如果不能满足要求，输出</span><span style="font-size:11.5pt; font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;;color:#333333">0</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;; color:#333333">。</span></p>  <p style="margin-top:0cm;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm; line-height:20.4pt;background:white;vertical-align:baseline"><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;; color:#333333">如果是</span><span style="font-size:11.5pt;font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;; color:#333333">2</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;;color:#333333">，后面将有两个整数</span><span style="font-size:11.5pt; font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;;color:#333333">X</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;; color:#333333">和</span><span style="font-size:11.5pt;font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;; color:#333333">D</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;;color:#333333">表示顾客要退掉</span><span style="font-size:11.5pt; font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;;color:#333333">X, X + 1, X + 2, ... , X + D - 1</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;;color:#333333">这</span><span style="font-size:11.5pt; font-family:&quot;Segoe UI&quot;,&quot;sans-serif&quot;;color:#333333">D</span><span style="font-size:11.5pt;Segoe UI&quot;;Segoe UI&quot;;Segoe UI&quot;; color:#333333">间房。对于这样的指令什么都不输出。</span></p>  <p><span style="font-family:宋体;">分析：</span></p>  <p><span style="font-family:宋体;">分别用</span>lsum<span style="font-family:宋体;">，</span>rsum<span style="font-family:宋体;">和</span>msum<span style="font-family:宋体;">表示区间左边最大连续房间数，区间右边最大连续房间数和区间最大连续房间数。</span></p>  <p><span style="font-family:宋体;">查询的时候，先找左儿子是否足够，然后如果不够就找左儿子的右区间和右儿子的左区间的和是否足够，如果两个都不够的话就找右儿子（这个时候右儿子就肯定满足了）。</span></p>  <p><span style="font-family:宋体;">查询结束时要把这个区间的房子更新成已住。</span></p>  <p><span style="font-family:宋体;">更新的时候和普通的线段树节点更新是一样的，不同的是在更新完子节点后，要把子节点的信息反馈到父节点中。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">在</span>NYOJ<span style="font-family:宋体;">中提交</span>TLE<span style="font-family:宋体;">，原因居然是宏定义比</span>inline<span style="font-family:宋体;">快。<br /><br /></span><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&lt;iostream&gt;<br />#include&lt;cstring&gt;<br />#include&lt;cctype&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;algorithm&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">没想到我把inline换成宏定义后就AC了，理论上这两个一样的，但是inline的结果却是TLE</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">#define</span>&nbsp;L(r)&nbsp;r&lt;&lt;1<br /><span style="color: #0000FF; ">#define</span>&nbsp;R(r)&nbsp;r&lt;&lt;1|1<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">inline&nbsp;int&nbsp;MID(int&nbsp;l,int&nbsp;r){return&nbsp;(l+r)&gt;&gt;1;}<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">inline&nbsp;int&nbsp;L(int&nbsp;r){return&nbsp;r&lt;&lt;1;}<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">inline&nbsp;int&nbsp;R(int&nbsp;r){return&nbsp;r&lt;&lt;1|1;}</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MAXM=50005;<br />typedef&nbsp;<span style="color: #0000FF; ">struct</span><br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;lsum,rsum,msum;<span style="color: #008000; ">//</span><span style="color: #008000; ">分别表示左边最大房间数，右边最大房间数，整体最大房间数</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cover;<span style="color: #008000; ">//</span><span style="color: #008000; ">是否住下</span><span style="color: #008000; "><br /></span>}node;<br />node&nbsp;tree[MAXM&lt;&lt;2];<br /><span style="color: #0000FF; ">void</span>&nbsp;pushDown(<span style="color: #0000FF; ">int</span>&nbsp;root,<span style="color: #0000FF; ">int</span>&nbsp;m)<span style="color: #008000; ">//</span><span style="color: #008000; ">向下更新</span><span style="color: #008000; "><br /></span>{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(tree[root].cover==-1)&nbsp;<span style="color: #0000FF; ">return</span>;<span style="color: #008000; ">//</span><span style="color: #008000; ">是否已经更新</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;tree[L(root)].cover=tree[R(root)].cover=tree[root].cover;<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[L(root)].msum=tree[L(root)].lsum=tree[L(root)].rsum=tree[root].cover?0:m-(m&gt;&gt;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[R(root)].msum=tree[R(root)].lsum=tree[R(root)].rsum=tree[root].cover?0:(m&gt;&gt;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root].cover=-1;<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;pushUp(<span style="color: #0000FF; ">int</span>&nbsp;root,<span style="color: #0000FF; ">int</span>&nbsp;m)<span style="color: #008000; ">//</span><span style="color: #008000; ">向上更新</span><span style="color: #008000; "><br /></span>{<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root].lsum=tree[L(root)].lsum;<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root].rsum=tree[R(root)].rsum;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(tree[root].lsum==m-(m&gt;&gt;1)&nbsp;)&nbsp;tree[root].lsum+=tree[R(root)].lsum;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(tree[root].rsum==(m&gt;&gt;1)&nbsp;)&nbsp;tree[root].rsum+=tree[L(root)].rsum;<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root].msum=max(tree[R(root)].lsum+tree[L(root)].rsum,max(tree[L(root)].msum,tree[R(root)].msum)&nbsp;);<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;Create(<span style="color: #0000FF; ">int</span>&nbsp;l,<span style="color: #0000FF; ">int</span>&nbsp;r,<span style="color: #0000FF; ">int</span>&nbsp;root)<span style="color: #008000; ">//</span><span style="color: #008000; ">建树过程</span><span style="color: #008000; "><br /></span>{<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root].cover=-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root].lsum=tree[root].rsum=tree[root].msum=r-l+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(l==r){<span style="color: #0000FF; ">return</span>;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;mid=(l+r)&gt;&gt;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;Create(l,mid,L(root));<br />&nbsp;&nbsp;&nbsp;&nbsp;Create(mid+1,r,R(root));<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;update(<span style="color: #0000FF; ">int</span>&nbsp;ll,<span style="color: #0000FF; ">int</span>&nbsp;rr,<span style="color: #0000FF; ">int</span>&nbsp;c,<span style="color: #0000FF; ">int</span>&nbsp;l,<span style="color: #0000FF; ">int</span>&nbsp;r,<span style="color: #0000FF; ">int</span>&nbsp;root)<span style="color: #008000; ">//</span><span style="color: #008000; ">更新</span><span style="color: #008000; "><br /></span>{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(ll&lt;=l&amp;&amp;r&lt;=rr)<span style="color: #008000; ">//</span><span style="color: #008000; ">如果找到这个范围就直接赋值返回，不向下继续更新</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root].msum=tree[root].lsum=tree[root].rsum=c?0:r-l+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root].cover=c;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;pushDown(root,r-l+1);<span style="color: #008000; ">//</span><span style="color: #008000; ">用到这个节点的子节点的时候就向下更新</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;m=(l+r)&gt;&gt;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(ll&lt;=m)&nbsp;update(ll,rr,c,l,m,L(root));<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(m&lt;rr)&nbsp;update(ll,rr,c,m+1,r,R(root));<br />&nbsp;&nbsp;&nbsp;&nbsp;pushUp(root,r-l+1);<span style="color: #008000; ">//</span><span style="color: #008000; ">向下更新完后需要把节点信息反馈给父节点</span><span style="color: #008000; "><br /></span>}<br /><span style="color: #0000FF; ">int</span>&nbsp;query(<span style="color: #0000FF; ">int</span>&nbsp;w,<span style="color: #0000FF; ">int</span>&nbsp;l,<span style="color: #0000FF; ">int</span>&nbsp;r,<span style="color: #0000FF; ">int</span>&nbsp;root)<span style="color: #008000; ">//</span><span style="color: #008000; ">查询满足连续房间数量的最左节点</span><span style="color: #008000; "><br /></span>{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(l==r)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;l;<br />&nbsp;&nbsp;&nbsp;&nbsp;pushDown(root,r-l+1&nbsp;);<span style="color: #008000; ">//</span><span style="color: #008000; ">用到这个节点的子节点的时候就向下更新</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;m=(l+r)&gt;&gt;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(tree[L(root)].msum&gt;=w)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;query(w,l,m,L(root));<span style="color: #008000; ">//</span><span style="color: #008000; ">如果左儿子满足就询问左儿子</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(tree[L(root)].rsum+tree[R(root)].lsum&gt;=w)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;m-tree[L(root)].rsum+1;<span style="color: #008000; ">//</span><span style="color: #008000; ">如果左儿子和右儿子之间的数量满足，则范围左儿子右边连续房间第一个的编号</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;query(w,m+1,r,R(root));<span style="color: #008000; ">//</span><span style="color: #008000; ">如果两者都不满足则询问右儿子</span><span style="color: #008000; "><br /></span>}<br /><br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">freopen("in.txt","r",stdin);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">freopen("out.txt","w",stdout);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,m;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(~scanf("%d&nbsp;%d",&amp;n,&amp;m))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create(1,n,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a,num,x,d,p;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;m;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;a);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(1==a)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;num);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(tree[1].msum&lt;num)&nbsp;puts("0");<span style="color: #008000; ">//</span><span style="color: #008000; ">如果整个区间的最大连续房间数量小于预定的数量就输出0</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p=query(num,1,n,1);<span style="color: #008000; ">//</span><span style="color: #008000; ">找到最左节点p</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",p);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update(p,p+num-1,1,1,n,1);<span style="color: #008000; ">//</span><span style="color: #008000; ">把已经有人的房间标记一下</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d&nbsp;%d",&amp;x,&amp;d);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update(x,x+d-1,0,1,n,1);<span style="color: #008000; ">//</span><span style="color: #008000; ">把此范围的房间标记成无人</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div></p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/173681.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-05-04 20:05 <a href="http://www.cppblog.com/cxiaojia/archive/2012/05/04/173681.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NYOJ 290 动物统计加强版（字典树姗姗来迟）</title><link>http://www.cppblog.com/cxiaojia/archive/2012/05/03/173583.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Thu, 03 May 2012 08:17:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/05/03/173583.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/173583.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/05/03/173583.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/173583.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/173583.html</trackback:ping><description><![CDATA[以前学数据结构的时候吧字典树忽视了，导致到现在才学到。<br />字典树是一种树形的数据结构，插入的复杂度为单词的平均长度。本题只需要写一个插入函数就可以了。<br />由于过几天就要省赛了，等到省赛后总结一下字典树。<br /><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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;trietree.cpp&nbsp;:&nbsp;定义控制台应用程序的入口点。<br /></span><span style="color: #008000; ">//<br /></span>#include&lt;cstdio&gt;<br />#include&lt;iostream&gt;<br />#include&lt;<span style="color: #0000FF; ">string</span>.h&gt;<br /><br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;num_chars&nbsp;=&nbsp;26;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">关键码最大位</span><span style="color: #008000; "><br /></span><br /><span style="color: #0000FF; ">int</span>&nbsp;_max;<br /><span style="color: #0000FF; ">char</span>&nbsp;ans[12];<br /><br /><span style="color: #0000FF; ">class</span>&nbsp;Trie<br />{<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;Trie();<br />&nbsp;&nbsp;&nbsp;&nbsp;Trie(Trie&amp;&nbsp;tr);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;~Trie();<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">int&nbsp;trie_search(const&nbsp;char*&nbsp;word,&nbsp;char*entry)&nbsp;const;</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;insert(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;word);<br /><span style="color: #0000FF; ">protected</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;Trie_node&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">关键码类型</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;isfin;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cnt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">关键码当前位数</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Trie_node*&nbsp;branch[num_chars];&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">关键码存放数组</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Trie_node();<br />&nbsp;&nbsp;&nbsp;&nbsp;};<br />&nbsp;&nbsp;&nbsp;&nbsp;Trie_node*&nbsp;root;<br />};<br /><br />Trie::Trie_node::Trie_node()&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">结点定义</span><span style="color: #008000; "><br /></span>{<br />&nbsp;&nbsp;&nbsp;&nbsp;isfin&nbsp;=&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;cnt&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;num_chars;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;branch[i]&nbsp;=&nbsp;NULL;<br />}<br /><br />Trie::Trie():root(NULL)<br />{<br />}<br /><br />Trie::~Trie()<br />{<br />}<br /><br /><br /><br /><span style="color: #0000FF; ">bool</span>&nbsp;Trie::insert(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">char</span>*word)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;result&nbsp;=&nbsp;1,position&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(root&nbsp;==&nbsp;NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Trie_node;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;char_code;<br />&nbsp;&nbsp;&nbsp;&nbsp;Trie_node&nbsp;*location&nbsp;=&nbsp;root;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(location&nbsp;!=&nbsp;NULL&nbsp;&amp;&amp;&nbsp;*word&nbsp;!=&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(*word&nbsp;&gt;=&nbsp;'a'&amp;&amp;&nbsp;*word&nbsp;&lt;=&nbsp;'z')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char_code&nbsp;=&nbsp;*word&nbsp;-&nbsp;'a';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(location-&gt;branch[char_code]&nbsp;==&nbsp;NULL)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location-&gt;branch[char_code]&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Trie_node;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;=&nbsp;location-&gt;branch[char_code];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;word++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;++location-&gt;cnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(location-&gt;cnt&gt;_max)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_max=location-&gt;cnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />}<br /><br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;Trie&nbsp;t;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d",&amp;n)!=EOF)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_max=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;s[12];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%s",s);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(t.insert(s))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(ans,s);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%s&nbsp;%d\n",ans,_max);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><img src ="http://www.cppblog.com/cxiaojia/aggbug/173583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-05-03 16:17 <a href="http://www.cppblog.com/cxiaojia/archive/2012/05/03/173583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 1159 Palindrome NYOJ 37 回文字符串(DP)</title><link>http://www.cppblog.com/cxiaojia/archive/2012/04/10/170810.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Tue, 10 Apr 2012 13:01:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/04/10/170810.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/170810.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/04/10/170810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/170810.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/170810.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">这道题有两种解法：</span></p>  <p><span style="font-family:宋体;">第一种：求</span>s<span style="font-family:宋体;">和</span>~s<span style="font-family:宋体;">的</span>LCS<span style="font-family:宋体;">，然后套用公式</span>length-LCS<span style="font-family:宋体;">长度</span> <span style="font-family:宋体;">即为所求。</span></p>  <p><span style="font-family:宋体;">第二种：直接</span>DP<span style="font-family:宋体;">求解。</span></p>  <p><span style="font-family:宋体;color:#464646;background:#F8F8F8">当</span><span style="font-family:&quot;simsun&quot;,&quot;serif&quot;; color:#464646;background:#F8F8F8">s[i] == s[j]</span><span style="font-family:宋体; color:#464646;background:#F8F8F8">时</span>&nbsp;<wbr style="background-color: #f8f8f8; color: #464646; font-family: simsun; text-align: left; ">&nbsp;f[i][j]=f[i+1][j-1]</p>  <p>&nbsp;<wbr style="background-color: #f8f8f8; color: #464646; font-family: simsun; text-align: left; ">&nbsp;<span style="font-family:宋体; color:#464646;background:#F8F8F8">当</span><span style="font-family:&quot;simsun&quot;,&quot;serif&quot;;color:#464646;background:#F8F8F8">s[i] != s[j]</span><span style="font-family:宋体;color:#464646;background:#F8F8F8">时</span>&nbsp;<wbr style="background-color: #f8f8f8; color: #464646; font-family: simsun; text-align: left; ">&nbsp;<wbr style="background-color: #f8f8f8; color: #464646; font-family: simsun; text-align: left; ">f[i][j]=min(f[i+1][j],f[i][j-1])+1;</p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;color:#464646;background:#F8F8F8">这个题我用的是一个大型的二维数组，代码很水，不建议欣赏。</span></p>  <p>&nbsp;<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&lt;iostream&gt;<br />#include&lt;<span style="color: #0000FF; ">string</span>&gt;<br />#include&lt;cstring&gt;<br />#include&lt;cstdio&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MAXM=1001;<br /><span style="color: #0000FF; ">short</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;&nbsp;f[MAXM][MAXM];<br /><span style="color: #0000FF; ">char</span>&nbsp;s[1001];<br /><span style="color: #0000FF; ">int</span>&nbsp;LCS()<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%s",s);<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(f,0,<span style="color: #0000FF; ">sizeof</span>(f));<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;len=strlen(s);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;len;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=i;j&gt;=0;--j)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(s[i]==s[j])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i+1][j+1]=f[i][j+2];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i+1][j+1]=min(f[i][j+1],f[i+1][j+2])+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;f[len][1];<br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;cin&gt;&gt;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(n--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",LCS());<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div></p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/170810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-04-10 21:01 <a href="http://www.cppblog.com/cxiaojia/archive/2012/04/10/170810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 1157 LITTLE SHOP OF FLOWERS（简单DP）</title><link>http://www.cppblog.com/cxiaojia/archive/2012/04/10/170755.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Tue, 10 Apr 2012 03:23:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/04/10/170755.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/170755.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/04/10/170755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/170755.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/170755.html</trackback:ping><description><![CDATA[<div><p style="line-height:19.5pt;background:white"><span style="font-size:10.5pt;color:#333333">题意</span><span style="font-size:10.5pt; font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:#333333">(</span><span style="font-size: 10.5pt;color:#333333">转</span><span style="font-size:10.5pt; font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:#333333">)</span><span style="font-size: 10.5pt;color:#333333">：将某些花放入某些花瓶中得到的观赏价值是不同的，并且要求开始输入的数据必须在后输入的数据前面。即</span><span style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:#333333">:</span><span style="font-size:10.5pt;color:#333333">若一号花放入了</span><span style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:#333333">3</span><span style="font-size:10.5pt;color:#333333">号花瓶，那么后面的花就不能放入</span><span style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:#333333">1</span><span style="font-size:10.5pt;color:#333333">，</span><span style="font-size:10.5pt;font-family:&quot;Arial&quot;,&quot;sans-serif&quot;;color:#333333">2</span><span style="font-size:10.5pt;color:#333333">号花瓶了。</span></p>  <p><span style="font-family:宋体;">分析：简单</span>DP<span style="font-family:宋体;">。</span>Dp[i][j]<span style="font-family:宋体;">表示前</span>i<span style="font-family:宋体;">朵花按顺序放入前</span>j <span style="font-family:宋体;">个花瓶中的最优观赏价值。</span></p>  <p><span style="font-family:宋体;">状态转移方程：</span>dp[i][j]=max(dp[i][j-1],dp[i-1][j-1]+map[i][j])</p>  <p><span style="font-family:宋体;">前</span>i<span style="font-family:宋体;">朵花按顺序放入前</span>j <span style="font-family:宋体;">个花瓶中的最优观赏价值</span>=max<span style="font-family:宋体;">（前</span>i<span style="font-family:宋体;">朵花按顺序放入前</span>j -1<span style="font-family:宋体;">个花瓶中的最优观赏价值，前</span>i-1<span style="font-family:宋体;">朵花按顺序放入前</span>j -1<span style="font-family:宋体;">个花瓶中的最优观赏价值</span>+<span style="font-family:宋体;">第</span>i<span style="font-family:宋体;">朵花放入</span>j<span style="font-family:宋体;">瓶中的价值）</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">注意价值可能为负数。<br /><br /></span><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;INF=0x7fffffff-1;<br /><span style="color: #0000FF; ">int</span>&nbsp;map[103][103];<br /><span style="color: #0000FF; ">int</span>&nbsp;dp[103][103];<br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;f,v;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d&nbsp;%d",&amp;f,&amp;v);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;=f;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=1;j&lt;=v;++j)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;map[i][j]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;=f;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=0;j&lt;=v;++j)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[i][j]=-INF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=1;j&lt;=v;++j)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;zc=min(j,f);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;=zc;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;temp=dp[i-1][j-1]==-INF?0:dp[i-1][j-1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp[i][j]=max(dp[i][j-1],temp+map[i][j]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",dp[f][v]);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div></p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/170755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-04-10 11:23 <a href="http://www.cppblog.com/cxiaojia/archive/2012/04/10/170755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 1042 Gone Fishing（贪心+枚举）</title><link>http://www.cppblog.com/cxiaojia/archive/2012/04/06/170232.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Fri, 06 Apr 2012 00:13:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/04/06/170232.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/170232.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/04/06/170232.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/170232.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/170232.html</trackback:ping><description><![CDATA[<div><p><a name="OLE_LINK2" style="width: 20px; height: 20px; text-indent: 20px; background-image: url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); background-repeat: no-repeat no-repeat; "></a><span style="font-family:宋体;">第一次</span>WA<span style="font-family:宋体;">，发现输出格式不对，改掉。</span></p>  <p><span style="font-family:宋体;">第二次</span>WA<span style="font-family:宋体;">，对结果相等的情况没有考虑，改掉。</span></p>  <p><span style="font-family:宋体;">第三次</span>AC<span style="font-family:宋体;">。</span></p>  <p><span style="font-family:宋体;">题意和题解见黑书</span>P13<span style="font-family:宋体;">。</span></p>  <p><span style="font-family:宋体;">需要注意的是要枚举从第一个湖走到最后一个湖的每一种情况，对结果相等这种情况做特殊处理。<br /><br /></span><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&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;cstring&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MAXM=30;<br /><span style="color: #0000FF; ">int</span>&nbsp;n,h;<br /><span style="color: #0000FF; ">int</span>&nbsp;f[MAXM],d[MAXM],t[MAXM];<br /><span style="color: #0000FF; ">int</span>&nbsp;each_time[MAXM];<br /><span style="color: #0000FF; ">int</span>&nbsp;ans_time[MAXM];<br /><span style="color: #0000FF; ">int</span>&nbsp;tf[MAXM];<br /><span style="color: #0000FF; ">int</span>&nbsp;ans;<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">初始化</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">void</span>&nbsp;init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(each_time,0,<span style="color: #0000FF; ">sizeof</span>(each_time));<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(ans_time,0,<span style="color: #0000FF; ">sizeof</span>(ans_time));<br />&nbsp;&nbsp;&nbsp;&nbsp;ans=0;<br />}<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">输入</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">bool</span>&nbsp;input()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;init();<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;n);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(0==n)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;h);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",f+i);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",d+i);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n-1;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",t+i);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />}<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;solve(<span style="color: #0000FF; ">int</span>&nbsp;rem_time,<span style="color: #0000FF; ">int</span>&nbsp;q)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;tans=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(each_time,0,<span style="color: #0000FF; ">sizeof</span>(each_time));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;memcpy(tf,f,<span style="color: #0000FF; ">sizeof</span>(f));<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;rem_time;++i)<span style="color: #008000; ">//</span><span style="color: #008000; ">找鱼的数量最多的湖</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;pos=0,max_fish=tf[0];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(q&gt;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=1;j&lt;=q;++j)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(max_fish&lt;tf[j])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max_fish=tf[j];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos=j;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++each_time[pos];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tans+=tf[pos];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tf[pos]-=d[pos];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(tf[pos]&lt;0)&nbsp;tf[pos]=0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(tans&gt;ans)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=tans;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy(ans_time,each_time,<span style="color: #0000FF; ">sizeof</span>(each_time));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(tans==ans)<span style="color: #008000; ">//</span><span style="color: #008000; ">细节，答案相等时做的处理。</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i=0;i&lt;n;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(each_time[i]!=ans_time[i])&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(each_time[i]&gt;ans_time[i])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy(ans_time,each_time,<span style="color: #0000FF; ">sizeof</span>(each_time));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;print()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("%d",ans_time[0]*5);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(",&nbsp;%d",ans_time[i]*5);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("\nNumber&nbsp;of&nbsp;fish&nbsp;expected:&nbsp;%d\n\n",ans);<br />}<br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;freopen("in.txt","r",stdin);<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;freopen("out2.txt","w",stdout);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(input())<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;rem_time=h*60;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rem_time/=5;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve(rem_time,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n-1;++i)<span style="color: #008000; ">//</span><span style="color: #008000; ">枚举每个湖</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rem_time-=t[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;solve(rem_time,i+1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div></p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/170232.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-04-06 08:13 <a href="http://www.cppblog.com/cxiaojia/archive/2012/04/06/170232.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 1036 Gangsters (DP)</title><link>http://www.cppblog.com/cxiaojia/archive/2012/03/29/169388.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Thu, 29 Mar 2012 03:37:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/03/29/169388.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/169388.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/03/29/169388.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/169388.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/169388.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">题意：宾馆有个可以伸缩的门，每秒钟可以伸长</span>1<span style="font-family:宋体;">个单位，或者缩小</span>1<span style="font-family:宋体;">个单位，或者原地不动。有</span>N<span style="font-family:宋体;">个强盗，每个强盗会在</span>t<span style="font-family:宋体;">的时间内到达并按，如果此时门的开方度和他的身材</span>s<span style="font-family:宋体;">正好相等，这个强盗就会进来，然后你就能得到</span>p<span style="font-family:宋体;">的加分。</span></p>  <p><span style="font-family:宋体;">初始状态门是关闭的，让你求出在</span>t<span style="font-family:宋体;">时刻得到的最大得分。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">分析：按时间从小到大排序，</span>t<span style="font-family:宋体;">时间内最大的得分由</span>t<span style="font-family:宋体;">之前的时刻决定，满足无后效性，每一个时刻都能得到最优解，满足最有子结构，所以</span>DP<span style="font-family:宋体;">。</span></p>  <p>F[i]<span style="font-family:宋体;">表示第</span>i<span style="font-family:宋体;">个人。</span></p>  <p><span style="font-family:宋体;">当身材之差小于时间之差时</span>F[i]=max(f[i],f[j]+ple[i].p) 0&lt;=j&lt;i <span style="font-family:宋体;">但得满足一个条件，第</span>j<span style="font-family:宋体;">个人已经进去，否则门伸长的宽度可能会小于身材。<br /><br /></span><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&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;cstring&gt;<br />#include&lt;cmath&gt;<br />#include&lt;algorithm&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MAXM=103;<br /><br />typedef&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;People<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t,p,s;<br /><br />}People;<br />People&nbsp;ple[MAXM];<br /><span style="color: #0000FF; ">int</span>&nbsp;f[MAXM];<br /><span style="color: #0000FF; ">bool</span>&nbsp;cmp(People&nbsp;p1,People&nbsp;p2)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;p1.t&lt;p2.t;<br />}<br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,k,s;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d&nbsp;%d&nbsp;%d",&amp;n,&amp;k,&amp;s);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;=n;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;ple[i].t);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;=n;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;ple[i].p);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;=n;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;ple[i].s);<br />&nbsp;&nbsp;&nbsp;&nbsp;sort(ple+1,ple+n+1,cmp);<br />&nbsp;&nbsp;&nbsp;&nbsp;f[0]=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;ple[0].p=0;ple[0].s=0;ple[0].t=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;=n;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=i-1;j&gt;=0;--j)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(f[j]&gt;=ple[j].p)<span style="color: #008000; ">//</span><span style="color: #008000; ">下一步做差的基础是第j个人已经进去。</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(abs(ple[i].s-ple[j].s)&lt;=ple[i].t-ple[j].t)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i]=max(f[i],f[j]+ple[i].p);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=max(ans,f[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",ans);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div></p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/169388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-03-29 11:37 <a href="http://www.cppblog.com/cxiaojia/archive/2012/03/29/169388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>foj 2077 The tallest tree （弱爆了）</title><link>http://www.cppblog.com/cxiaojia/archive/2012/03/27/169100.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Tue, 27 Mar 2012 01:24:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/03/27/169100.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/169100.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/03/27/169100.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/169100.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/169100.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">看了解题报告之后我在想，为什么我会傻傻的去把每一天的高度都求出来。。。。</span></p>  <p>&nbsp;</p>  <p><span style="font-family: 宋体; ">询问哪一天就求出哪一天的高度，把天数排一下序可以在求的过程中删掉高度和增长速度都小的树。时间复杂度</span>&lt;=O(m*n)<span style="font-family:宋体;">。<br /><br /></span></p><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&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;cstring&gt;<br />#include&lt;algorithm&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br />typedef&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;ll;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MAXM=100003;<br />typedef&nbsp;<span style="color: #0000FF; ">struct</span><br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ll&nbsp;high,add;<span style="color: #008000; ">//</span><span style="color: #008000; ">高度和增长速度</span><span style="color: #008000; "><br /></span>}Tree;<br />Tree&nbsp;tree[MAXM];<br />ll&nbsp;day[MAXM];<span style="color: #008000; ">//</span><span style="color: #008000; ">实际的数天</span><span style="color: #008000; "><br /></span>ll&nbsp;sday[MAXM];<span style="color: #008000; ">//</span><span style="color: #008000; ">排序后的天数</span><span style="color: #008000; "><br /></span>ll&nbsp;ans[MAXM];<span style="color: #008000; ">//</span><span style="color: #008000; ">结果</span><br /><font color="#0000ff"><br /></font><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,m;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d&nbsp;%d",&amp;n,&amp;m)!=EOF)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%lld&nbsp;%lld",&amp;tree[i].high,&amp;tree[i].add);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;m;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%lld",day+i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sday[i]=day[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(sday,sday+m);<span style="color: #008000; ">//</span><span style="color: #008000; ">天数从小到大排序</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(ans,0,<span style="color: #0000FF; ">sizeof</span>(ans));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tree&nbsp;tmax;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;m;++i)<span style="color: #008000; ">//</span><span style="color: #008000; ">枚举排序后的天数</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmax.high=tree[0].high+sday[i]*tree[0].add;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmax.add=tree[0].add;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;pos=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=1;j&lt;n;++j)<span style="color: #008000; ">//</span><span style="color: #008000; ">枚举每一颗树</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tree&nbsp;temp=tree[j];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.high+=sday[i]*tree[j].add;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;!(tmax.high&gt;=temp.high&amp;&amp;tmax.add&gt;=temp.add)&nbsp;)<span style="color: #008000; ">//</span><span style="color: #008000; ">如果第j棵树在sday[i]的高度和增长速度都小于某棵树，则舍弃第j棵树</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[pos++]=tree[j];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">找到在sday[i]时刻高度最大的树</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(tmax.high&lt;temp.high)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmax=temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n=pos;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans[&nbsp;sday[i]&nbsp;]=tmax.high;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;m;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%lld\n",ans[&nbsp;day[i]&nbsp;]);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><p>&nbsp;</p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/169100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-03-27 09:24 <a href="http://www.cppblog.com/cxiaojia/archive/2012/03/27/169100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>foj 2072 Count（二分查找）</title><link>http://www.cppblog.com/cxiaojia/archive/2012/03/26/168991.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Mon, 26 Mar 2012 04:32:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/03/26/168991.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/168991.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/03/26/168991.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/168991.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/168991.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">比赛的时候手写的二分，总是</span>RE<span style="font-family:宋体;">。边界处理的能力还有待加强。</span></p>  <p><span style="font-family:宋体;">看了解题报告之后感觉自己弱爆了，知道方法的题都写不出来。而且当时还是用的</span>map<span style="font-family:宋体;">写的，悲剧的超时了。改用</span>vector<span style="font-family:宋体;">就过了。</span></p>  <p><span style="font-family:宋体;">把每个数字出现的位置存储下来，然后对所求的位置进行两次二分，就</span>OK<span style="font-family:宋体;">了。用的是</span>stl<span style="font-family:宋体;">里的二分，没想到迭代器还可以这样用。<br /><br /></span><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; border-image: initial; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;cstring&gt;<br />#include&lt;map&gt;<br />#include&lt;algorithm&gt;<br />#include&lt;vector&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br />&nbsp;vector&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;m[100003];<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,q;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d&nbsp;%d",&amp;n,&amp;q)!=EOF)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;100003;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m[i].clear();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;val,l,r,x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;=n;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;val);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m[val].push_back(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;=q;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d&nbsp;%d&nbsp;%d",&amp;l,&amp;r,&amp;x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(m[x].size()!=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;*(--m[x].end())&lt;l&nbsp;||&nbsp;*m[x].begin()&gt;r&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("0\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans=(&nbsp;(--upper_bound(m[x].begin(),m[x].end(),r))-m[x].begin()&nbsp;)-(&nbsp;lower_bound(m[x].begin(),m[x].end(),l)-m[x].begin()&nbsp;)+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;printf("0\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div></p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/168991.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-03-26 12:32 <a href="http://www.cppblog.com/cxiaojia/archive/2012/03/26/168991.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdu 1069 Monkey and Banana NYOJ 232 （简单DP）</title><link>http://www.cppblog.com/cxiaojia/archive/2012/03/23/168704.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Fri, 23 Mar 2012 02:37:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/03/23/168704.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/168704.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/03/23/168704.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/168704.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/168704.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">题意：把给定尺寸的长方体（数量不限）叠加在一起，叠加的条件是，上面一个长方体的长和宽比下面长方体的长和宽短，不能相等，长方体可以任意面朝下摆放，求这些长方体能叠加的最高的高度。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">把每个长方体分成</span>3<span style="font-family:宋体;">个元素。然后就和矩形嵌套差不多了，排序之后求容量最大的子序列。<br /><br /><br /></span></p><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 />-->&nbsp; &nbsp; #include&lt;iostream&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;#include&lt;cstdio&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;#include&lt;cstring&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;#include&lt;algorithm&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;<span style="color: #0000FF; ">struct</span><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;l,w,h;<br />&nbsp;&nbsp;&nbsp;&nbsp;}Cub;<br />&nbsp;&nbsp;&nbsp;&nbsp;Cub&nbsp;cub[31*3];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;f[31*3];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;cmp(Cub&nbsp;c1,Cub&nbsp;c2)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(c1.l==c2.l)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;c1.w&lt;c2.w;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;c1.l&lt;c2.l;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;input()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;n);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!n)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;l,w,h;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d&nbsp;%d&nbsp;%d",&amp;l,&amp;w,&amp;h);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cub[cnt].h=l;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cub[cnt].w=w&gt;h?h:w;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cub[cnt].l=w&gt;h?w:h;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cub[cnt].h=w;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cub[cnt].w=l&gt;h?h:l;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cub[cnt].l=l&gt;h?l:h;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cub[cnt].h=h;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cub[cnt].w=l&gt;w?w:l;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cub[cnt].l=l&gt;w?l:w;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;DP()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(f,0,<span style="color: #0000FF; ">sizeof</span>(f));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;cnt;i++)&nbsp;f[i]=cub[i].h;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;cnt;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=0;j&lt;i;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>((cub[i].l!=cub[j].l)&amp;&amp;(cub[i].w&gt;cub[j].w))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i]=max(f[i],f[j]+cub[i].h);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;print()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;pos=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;cnt;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=max(f[i],ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Case&nbsp;%d:&nbsp;maximum&nbsp;height&nbsp;=&nbsp;%d\n",++pos,ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(input())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(cub,cub+cnt,cmp);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">for(int&nbsp;i=0;i&lt;cnt;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;printf("%d&nbsp;%d&nbsp;%d\n",cub[i].l,cub[i].w,cub[i].h);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DP();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print();<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp; &nbsp;</div><p>&nbsp;</p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/168704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-03-23 10:37 <a href="http://www.cppblog.com/cxiaojia/archive/2012/03/23/168704.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NYOJ 110 剑客决斗（简单DP）</title><link>http://www.cppblog.com/cxiaojia/archive/2012/03/22/168576.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Thu, 22 Mar 2012 02:30:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/03/22/168576.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/168576.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/03/22/168576.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/168576.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/168576.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">细节没有处理好，导致超时了好多次。</span></p>  <p><span style="font-family:宋体;">对于</span>i<span style="font-family:宋体;">和</span>j<span style="font-family:宋体;">中间的</span>k<span style="font-family:宋体;">，如果</span>i<span style="font-family:宋体;">和</span>j<span style="font-family:宋体;">能遇见</span>k<span style="font-family:宋体;">，</span>i<span style="font-family:宋体;">能打败</span>k<span style="font-family:宋体;">或者</span>j<span style="font-family:宋体;">能打败</span>k<span style="font-family:宋体;">，则</span>i<span style="font-family:宋体;">就能遇见</span>j<span style="font-family:宋体;">，用</span>f[i][j]<span style="font-family:宋体;">表示</span>i<span style="font-family:宋体;">和</span>j<span style="font-family:宋体;">是否能遇见。如果</span>i<span style="font-family:宋体;">最终能遇见自己，那么</span>i<span style="font-family:宋体;">就有取得胜利的可能。</span></p>  <p><span style="font-family:宋体;">没有开大数组的必要，直接取余就可以。得看明白那些是最优子结构，否则你没办法</span>DP<span style="font-family:宋体;">。</span></p>  <p><span style="font-family:宋体;">时间复杂度为</span>O(n^3)<br /><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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; ">NYOj110<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">Time:732&nbsp;Memory:720</span><span style="color: #008000; "><br /></span>#include&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;cstring&gt;<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">#include&lt;&gt;</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><br /><span style="color: #0000FF; ">bool</span>&nbsp;a[503][503];<br /><span style="color: #0000FF; ">bool</span>&nbsp;f[503][503];<br /><br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;t);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(t--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;n);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=0;j&lt;n;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;a[i][j]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(f,0,<span style="color: #0000FF; ">sizeof</span>(f));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i][(i+1)%n]=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=2;i&lt;=n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=0;j&lt;n;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;e=(j+i)%n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(f[j][e])&nbsp;<span style="color: #0000FF; ">continue</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;k=(j+1)%n;k!=e;k++,k%=n)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(f[j][k]&amp;&amp;f[k][e]&amp;&amp;(a[j][k]||a[e][k]))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[j][e]=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(f[i][i])&nbsp;ans++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div></p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/168576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-03-22 10:30 <a href="http://www.cppblog.com/cxiaojia/archive/2012/03/22/168576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 2411 Mondriaan's Dream（状态压缩DP）</title><link>http://www.cppblog.com/cxiaojia/archive/2012/03/21/168534.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Wed, 21 Mar 2012 11:41:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/03/21/168534.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/168534.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/03/21/168534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/168534.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/168534.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">又是周伟大牛论文里的例题。曾经做过一个只有两行的题，很水的</span>DP<span style="font-family:宋体;">。矩阵加大后状态也增加了很多，很自然的就用到了状态压缩。</span></p>  <p><span style="font-family:宋体;">但是，看了</span>discuss<span style="font-family:宋体;">之后觉得自己又一次弱爆了，那</span>25<span style="font-family:宋体;">行的代码写的都是神马啊，看来只有膜拜的份了。还是先写好状态压缩吧。</span></p>  <p><span style="font-family:宋体;">起初自己不会</span>DFS<span style="font-family:宋体;">，看了某位大牛的解题报告，理解了</span>DFS<span style="font-family:宋体;">并且表示这位大牛的</span>DFS<span style="font-family:宋体;">写的太强大了，哦还有，周伟大牛的论文太强大了，哦还没完，状态压缩后的二进制表示法太强大了，简简单单的</span>0<span style="font-family:宋体;">和</span>1<span style="font-family:宋体;">就把所有的状态就搞定了。</span></p>  <p><span style="font-family:宋体;">发现</span>vector<span style="font-family:宋体;">在这里用很合适。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">大牛博客地址：</span><a href="http://www.cppblog.com/sdfond/archive/2009/07/31/91761.html">http://www.cppblog.com/sdfond/archive/2009/07/31/91761.html</a></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">难点：</span>1<span style="font-family:宋体;">、</span>DFS<span style="font-family:宋体;">寻找状态的过程。</span>2<span style="font-family: 宋体; background-color: highlight; ">、状态向上凸出和向下凸出的处理。<br /><br /></span></p><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 />--><span style="color: #008000; ">//</span><span style="color: #008000; ">poj&nbsp;2411<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">Time:&nbsp;16MS&nbsp;Memory:1032K</span><span style="color: #008000; "><br /></span><br />#include&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;vector&gt;<br />#include&lt;cstring&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">int</span>&nbsp;m,n;<br />vector&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;v[1&lt;&lt;11];<br /><span style="color: #0000FF; ">long</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;f[13][1&lt;&lt;11];<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">初始化</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">void</span>&nbsp;init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;(1&lt;&lt;11);i++)&nbsp;v[i].clear();<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(f,0,<span style="color: #0000FF; ">sizeof</span>(f));<br />}<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">输入</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">bool</span>&nbsp;input()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d&nbsp;%d",&amp;m,&amp;n);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(m&lt;n)&nbsp;swap(m,n);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(m&amp;&amp;n)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />}<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">寻找状态</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">void</span>&nbsp;DFS(<span style="color: #0000FF; ">int</span>&nbsp;x,<span style="color: #0000FF; ">int</span>&nbsp;s1,<span style="color: #0000FF; ">int</span>&nbsp;s2)<span style="color: #008000; ">//</span><span style="color: #008000; ">s1是s2的上一行状态</span><span style="color: #008000; "><br /></span>{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(x&gt;=n)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(s1&lt;(1&lt;&lt;n)&amp;&amp;s2&lt;(1&lt;&lt;n))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v[s2].push_back(s1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;DFS(x+1,s1&lt;&lt;1|1,s2&lt;&lt;1);<span style="color: #008000; ">//</span><span style="color: #008000; ">s1为1，s2为0表示竖着摆放</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;DFS(x+1,s1&lt;&lt;1,s2&lt;&lt;1|1);<span style="color: #008000; ">//</span><span style="color: #008000; ">s1为0表示竖着摆放的下半段，s2为1表示竖着摆放的上半段和横着摆放的半段</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;DFS(x+2,s1&lt;&lt;2|3,s2&lt;&lt;2|3);<span style="color: #008000; ">//</span><span style="color: #008000; ">s1和s2都横着摆放，或者s1横着放,s2为两个竖着摆放的上半段</span><span style="color: #008000; "><br /></span>}<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">DP</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">void</span>&nbsp;DP()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;total=1&lt;&lt;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;f[0][0]=1;<span style="color: #008000; ">//</span><span style="color: #008000; ">第0行的状态，全0表示此行已经被占满，不允许第一行向上凸出</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;=m+1;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=0;j&lt;total;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;k=0;k&lt;v[j].size();k++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i][j]+=f[i-1][v[j][k]];<br />}<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">输出</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">void</span>&nbsp;print()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("%I64d\n",f[m+1][(1&lt;&lt;n)-1]);<span style="color: #008000; ">//</span><span style="color: #008000; ">第m+1行为全1状态，表示第m行没有凸出来的状态。</span><span style="color: #008000; "><br /></span>}<br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(input())<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DFS(0,0,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DP();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><span style="font-family: 宋体; "><br /><br /></span><p>&nbsp;</p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/168534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-03-21 19:41 <a href="http://www.cppblog.com/cxiaojia/archive/2012/03/21/168534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WA used long long,AC used __int64</title><link>http://www.cppblog.com/cxiaojia/archive/2012/03/21/168466.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Wed, 21 Mar 2012 01:37:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/03/21/168466.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/168466.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/03/21/168466.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/168466.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/168466.html</trackback:ping><description><![CDATA[The output should be printf in %I64d ,or you will get WA.<br />&nbsp;Because the server system is windows.<img src ="http://www.cppblog.com/cxiaojia/aggbug/168466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-03-21 09:37 <a href="http://www.cppblog.com/cxiaojia/archive/2012/03/21/168466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poj 1185 炮兵阵地 （状态压缩DP）</title><link>http://www.cppblog.com/cxiaojia/archive/2012/03/20/168435.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Tue, 20 Mar 2012 13:11:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/03/20/168435.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/168435.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/03/20/168435.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/168435.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/168435.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">弱爆了。我调试了一个下午加半个晚上，最后重写了一遍</span>AC<span style="font-family:宋体;">了。</span>2xx ms<span style="font-family:宋体;">的时间，在自己</span>oj<span style="font-family:宋体;">上排倒数第一。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">我的第二道状态压缩</span>DP<span style="font-family:宋体;">，也是周伟论文《状态压缩》里的一道例题，核心思想这篇论文分析的很清楚，建议学习状态压缩的同学一定要看一下。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">这道题做的很过瘾，收获很多，各种二进制的解法。还有状就是态数的求法也很强，刚开始写的时候还准备</span>DFS<span style="font-family:宋体;">呢，后来大牛告诉我直接枚举所有状态进行删除就可以了，好吧，删除的判断又是二进制。<br /><br /></span><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&lt;iostream&gt;<br />#include&lt;cstring&gt;<br />#include&lt;cstdio&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MAXM=63;<br /><span style="color: #0000FF; ">int</span>&nbsp;e[103];<br /><span style="color: #0000FF; ">int</span>&nbsp;m,n;<br /><span style="color: #0000FF; ">int</span>&nbsp;s[MAXM];<br /><span style="color: #0000FF; ">int</span>&nbsp;c[MAXM];<br /><span style="color: #0000FF; ">int</span>&nbsp;f[103][MAXM][MAXM];<br /><span style="color: #0000FF; ">int</span>&nbsp;cnt;<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">输入数据</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">void</span>&nbsp;input()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(e,0,<span style="color: #0000FF; ">sizeof</span>(e));<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;str[13];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;m;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%s",str);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=0;j&lt;n;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(str[j]=='H')&nbsp;e[i]=(e[i]&lt;&lt;1)|1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;e[i]=e[i]&lt;&lt;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">比较左右间隔是否为2</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">bool</span>&nbsp;fit(<span style="color: #0000FF; ">int</span>&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;x&nbsp;&amp;&nbsp;(x&lt;&lt;1)&nbsp;)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(&nbsp;x&nbsp;&amp;&nbsp;(x&lt;&lt;2)&nbsp;)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />}<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">二进制中1的个数</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">int</span>&nbsp;num1(<span style="color: #0000FF; ">int</span>&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;count=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(x&gt;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x=&nbsp;x&nbsp;&amp;&nbsp;(x-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;count;<br />}<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">寻找状态数</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">void</span>&nbsp;DFS()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;total=1&lt;&lt;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;total;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(fit(i))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s[++cnt]=i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c[cnt]=num1(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">DP</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">void</span>&nbsp;DP()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">初始化</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;memset(f,-1,<span style="color: #0000FF; ">sizeof</span>(f));<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;=cnt;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(s[i]&amp;e[0])<span style="color: #0000FF; ">continue</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[0][i][0]=c[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;m;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=0;j&lt;=cnt;++j)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(s[j]&amp;e[i])<span style="color: #0000FF; ">continue</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;k=0;k&lt;=cnt;++k)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(s[j]&amp;s[k])<span style="color: #0000FF; ">continue</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;l=0;l&lt;=cnt;++l)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(s[j]&amp;s[l])&nbsp;<span style="color: #0000FF; ">continue</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(f[i-1][k][l]==-1)&nbsp;<span style="color: #0000FF; ">continue</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i][j][k]=max(f[i][j][k],f[i-1][k][l]+c[j]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">输出</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">void</span>&nbsp;print()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(m!=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;=cnt;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=0;j&lt;=cnt;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=max(ans,f[m-1][i][j]);<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",ans);<br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">freopen("in.txt","r",stdin);</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d&nbsp;%d",&amp;m,&amp;n)!=EOF)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt=-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DFS();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DP();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><span style="font-family:宋体;"><br /></span></p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/168435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-03-20 21:11 <a href="http://www.cppblog.com/cxiaojia/archive/2012/03/20/168435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sgu 223  Little Kings（状态压缩DP）</title><link>http://www.cppblog.com/cxiaojia/archive/2012/03/20/168375.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Tue, 20 Mar 2012 03:34:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/03/20/168375.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/168375.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/03/20/168375.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/168375.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/168375.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">第一个状态压缩啊，调试了一个上午，终于过了，国王的个数原来是从</span>0<span style="font-family:宋体;">开始循环的。</span></p>  <p><span style="font-family:宋体;">周伟大神的论文《状态压缩》很给力，如果不是这篇论文，我都不知道该如何入门了。哎，没人教的杯具。</span></p>  <p><span style="font-family:宋体;">本题题解《状态压缩》讲的很清楚，我就不多废话了。需要注意的是范围会超</span>int<span style="font-family:宋体;">，还有对状态的范围要把握好，搞不好你也要杯具去各种调试了。</span></p>  <p><span style="font-family:宋体;">自己写的</span>DFS<span style="font-family:宋体;">很挫，借用了不知道哪位大牛的</span>DFS<span style="font-family:宋体;">。<br /><br /></span><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&lt;iostream&gt;<br />#include&lt;cstring&gt;<br />#include&lt;cstdio&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MAXM=520;<br /><span style="color: #0000FF; ">int</span>&nbsp;n,k;<br /><span style="color: #0000FF; ">int</span>&nbsp;s[MAXM];<span style="color: #008000; ">//</span><span style="color: #008000; ">状态数</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">int</span>&nbsp;c[MAXM];<span style="color: #008000; ">//</span><span style="color: #008000; ">1的个数</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">long</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;f[13][MAXM][103];<br /><span style="color: #0000FF; ">int</span>&nbsp;ck;<br /><span style="color: #0000FF; ">void</span>&nbsp;dfs(<span style="color: #0000FF; ">int</span>&nbsp;x,<span style="color: #0000FF; ">int</span>&nbsp;val,<span style="color: #0000FF; ">int</span>&nbsp;cnt)<span style="color: #008000; ">//</span><span style="color: #008000; ">DFS寻找每行的状态数</span><span style="color: #008000; "><br /></span>{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(x==n)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s[++ck]=val;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c[ck]=cnt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;dfs(x+1,val&lt;&lt;1,cnt);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!(val&amp;1))<br />&nbsp;&nbsp;&nbsp;&nbsp;dfs(x+1,val&lt;&lt;1|1,cnt+1);<br />}<br /><span style="color: #0000FF; ">bool</span>&nbsp;cont(<span style="color: #0000FF; ">int</span>&nbsp;s1,<span style="color: #0000FF; ">int</span>&nbsp;s2)<span style="color: #008000; ">//</span><span style="color: #008000; ">判断与题意是否矛盾</span><span style="color: #008000; "><br /></span>{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(s1&amp;s2)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<span style="color: #008000; ">//</span><span style="color: #008000; ">和正上方判断</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(s1&amp;(s2&lt;&lt;1))<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<span style="color: #008000; ">//</span><span style="color: #008000; ">和右上方判断</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(s1&amp;(s2&gt;&gt;1))<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<span style="color: #008000; ">//</span><span style="color: #008000; ">和左上方判断</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;dp()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">初始化状态</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(f,0,<span style="color: #0000FF; ">sizeof</span>(f));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[0][1][0]=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">dp</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;=n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=1;j&lt;=ck;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;g=1;g&lt;=ck;g++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;p=0;p&lt;=k;p++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>((p-c[j]&gt;=0)&amp;&amp;cont(s[j],s[g]))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i][j][p]+=f[i-1][g][p-c[j]];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d&nbsp;%d",&amp;n,&amp;k)!=EOF)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ck=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfs(0,0,0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dp();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;ans=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;=ck;++i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans+=f[n][i][k];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%I64d\n",ans);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}<br /></div></p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/168375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-03-20 11:34 <a href="http://www.cppblog.com/cxiaojia/archive/2012/03/20/168375.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NYOJ 475 Doctor's order (逆序数)</title><link>http://www.cppblog.com/cxiaojia/archive/2012/03/19/168314.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Mon, 19 Mar 2012 05:43:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/03/19/168314.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/168314.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/03/19/168314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/168314.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/168314.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;"></span></p><div><p><span style="font-family:宋体;">大意：两个垂直于</span>x<span style="font-family:宋体;">轴的直线</span>lx<span style="font-family:宋体;">和</span>rx<span style="font-family:宋体;">围成的区域。有</span>n<span style="font-family:宋体;">条直线穿过这片区域，每条直线</span>yi=kxi+b<span style="font-family:宋体;">，给出</span>k<span style="font-family:宋体;">和</span>b<span style="font-family:宋体;">。求直线把这个区域分成了几个部分。三条直线不会交于一点（包括：两个垂直于</span>x<span style="font-family:宋体;">轴的直线）。</span></p>  <p><span style="font-family:宋体;">画图可以找出一种关系，分成的区域数</span>=<span style="font-family:宋体;">交点数</span>+<span style="font-family:宋体;">线段数</span>+1<span style="font-family:宋体;">；对左端点从大到小排序，然后对右端点求逆序数，逆序数就是交点数，线段数已知，空间数就出来了。</span></p></div><p><span style="font-family:宋体;"><br /><br /></span><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&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;algorithm&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MAXM=30004;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;INF=0x7fffffff-1;<br />typedef&nbsp;<span style="color: #0000FF; ">struct</span><br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;y1,y2;<br />}Line;<br />Line&nbsp;line[MAXM];<br /><span style="color: #0000FF; ">int</span>&nbsp;temp1[MAXM/2+1];<br /><span style="color: #0000FF; ">int</span>&nbsp;temp2[MAXM/2+1];<br /><span style="color: #0000FF; ">int</span>&nbsp;cnt;<br /><span style="color: #0000FF; ">bool</span>&nbsp;cmp(Line&nbsp;l1,Line&nbsp;l2)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;l1.y1&gt;l2.y1;<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;merge(<span style="color: #0000FF; ">int</span>&nbsp;start,<span style="color: #0000FF; ">int</span>&nbsp;mid,<span style="color: #0000FF; ">int</span>&nbsp;end)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n1,n2;<br />&nbsp;&nbsp;&nbsp;&nbsp;n1=mid-start+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;n2=end-mid;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n1;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;temp1[i]=line[start+i].y2;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n2;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;temp2[i]=line[mid+i+1].y2;<br />&nbsp;&nbsp;&nbsp;&nbsp;temp1[n1]=-INF;<br />&nbsp;&nbsp;&nbsp;&nbsp;temp2[n2]=-INF;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;k=start,i=0,j=0;k&lt;=end;k++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(temp1[i]&gt;=temp2[j])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line[k].y2=temp1[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt+=n1-i;<span style="color: #008000; ">//</span><span style="color: #008000; ">求逆序数</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line[k].y2=temp2[j];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">归并排序</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">void</span>&nbsp;mergesort(<span style="color: #0000FF; ">int</span>&nbsp;start,<span style="color: #0000FF; ">int</span>&nbsp;end)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(start&gt;=end)&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;mid=(end+start)/2;<br />&nbsp;&nbsp;&nbsp;&nbsp;mergesort(start,mid);<br />&nbsp;&nbsp;&nbsp;&nbsp;mergesort(mid+1,end);<br />&nbsp;&nbsp;&nbsp;&nbsp;merge(start,mid,end);<br /><br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;lx,rx;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d%d",&amp;lx,&amp;rx)!=EOF)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,k,b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;n);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&amp;k,&amp;b);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line[i].y1=lx*k+b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line[i].y2=rx*k+b;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(line,line+n,cmp);<span style="color: #008000; ">//</span><span style="color: #008000; ">对左端点从大到小排序</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mergesort(0,n-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",cnt+n+1);<span style="color: #008000; ">//</span><span style="color: #008000; ">空间数=交点数+线段数+1</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div></p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/168314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-03-19 13:43 <a href="http://www.cppblog.com/cxiaojia/archive/2012/03/19/168314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zoj 3578 NYOJ 472 Matrix （水题）</title><link>http://www.cppblog.com/cxiaojia/archive/2012/03/19/168313.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Mon, 19 Mar 2012 05:36:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/03/19/168313.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/168313.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/03/19/168313.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/168313.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/168313.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">一直认为是二维线段树，看了解题报告后居然是水题。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">最多</span>1000<span style="font-family:宋体;">个矩形。每次扫描矩形与之前的矩形是否相交，在相交的矩形中找到一个最大的值</span>max<span style="font-family:宋体;">，让这个</span>max<span style="font-family:宋体;">加上</span>h<span style="font-family:宋体;">就是这次矩形的值。每次向回扫描一遍，最高也就</span>1000*1000<span style="font-family:宋体;">的时间，</span>1s<span style="font-family:宋体;">内绝对没问题。<br /><br /><br /></span><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&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><br />typedef&nbsp;<span style="color: #0000FF; ">struct</span><br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;x1,y1,x2,y2,_max;<br />}Matrix;<br />Matrix&nbsp;matrix[1003];<br /><br /><span style="color: #0000FF; ">bool</span>&nbsp;cover(<span style="color: #0000FF; ">int</span>&nbsp;i,<span style="color: #0000FF; ">int</span>&nbsp;j)<span style="color: #008000; ">//</span><span style="color: #008000; ">是否相交</span><span style="color: #008000; "><br /></span>{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(matrix[i].x1&gt;=matrix[j].x2||matrix[j].x1&gt;=matrix[i].x2)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(matrix[i].y1&gt;=matrix[j].y2||matrix[j].y1&gt;=matrix[i].y2)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />}<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;N,M,C;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d&nbsp;%d&nbsp;%d",&amp;N,&amp;M,&amp;C)!=EOF)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a,b,h,x,y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;C;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;tmax=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d&nbsp;%d&nbsp;%d&nbsp;%d&nbsp;%d",&amp;a,&amp;b,&amp;h,&amp;x,&amp;y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matrix[i].x1=x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matrix[i].y1=y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matrix[i].x2=x+a;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matrix[i].y2=y+b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=i-1;j&gt;=0;j--)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(cover(i,j))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmax=max(tmax,matrix[j]._max);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matrix[i]._max=tmax+h;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=max(ans,matrix[i]._max);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div></p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/168313.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-03-19 13:36 <a href="http://www.cppblog.com/cxiaojia/archive/2012/03/19/168313.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ural1117. Hierarchy（技巧题，WA了好多次）</title><link>http://www.cppblog.com/cxiaojia/archive/2012/03/14/167838.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Wed, 14 Mar 2012 00:48:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/03/14/167838.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/167838.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/03/14/167838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/167838.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/167838.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">这道题纠结我了一天的时间，本以为用</span>lowbit<span style="font-family:宋体;">可以轻松搞定，可是中间出现了各种故障，</span>WA<span style="font-family:宋体;">了很多次才</span>AC<span style="font-family:宋体;">。</span></p>  <p><span style="font-family:宋体;">计算</span>a<span style="font-family:宋体;">和</span>b<span style="font-family:宋体;">之间的节点数，可以用</span>1-a<span style="font-family:宋体;">与</span>1-b<span style="font-family:宋体;">的节点数之差来求。在右子树的点可以转化为相应的左子树的点，经过多步骤的转化，可以把点的位置固定在树的最左边的那条线上。所以只需要计算每层最左边的节点数就</span>OK<span style="font-family:宋体;">了。经过递推会得出一个公式，</span>z[i]=z[i-1]*2+i-1;i<span style="font-family:宋体;">表示树的高度。<br /><br /></span><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&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;cmath&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br />typedef&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;ll;<br />ll&nbsp;z[33]={0};<span style="color: #008000; ">//</span><span style="color: #008000; ">从1到n经过的点</span><span style="color: #008000; "><br /></span>ll&nbsp;d[33]={0};<span style="color: #008000; ">//</span><span style="color: #008000; ">树每层最左边的序号</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">void</span>&nbsp;init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=2;i&lt;=31;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z[i]=z[i-1]*2+i-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;d[1]=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=2;i&lt;=31;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d[i]=d[i-1]&lt;&lt;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />ll&nbsp;lowbit(ll&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;x&amp;(-x);<br />}<br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; ">得到数的二进制位数</span><span style="color: #008000; "><br /></span>ll&nbsp;getbit(ll&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ll&nbsp;cnt=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(x!=1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&gt;&gt;=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;cnt;<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;swap(<span style="color: #0000FF; ">int</span>&amp;&nbsp;a,<span style="color: #0000FF; ">int</span>&amp;&nbsp;b)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;temp=a;<br />&nbsp;&nbsp;&nbsp;&nbsp;a=b;<br />&nbsp;&nbsp;&nbsp;&nbsp;b=temp;<br />}<br />ll&nbsp;fun(ll&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;d[getbit(x)+1];<span style="color: #008000; ">//</span><span style="color: #008000; ">得到位数对应的二进制数</span><span style="color: #008000; "><br /></span>}<br />ll&nbsp;solve(ll&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;ll&nbsp;bx=x-lowbit(x);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(bx==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;z[getbit(x)];<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;temp=fun(x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ll&nbsp;sum=solve(temp)+abs(solve(temp)-solve(temp-(x-temp)));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;sum;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />init();<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a,b;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d&nbsp;%d",&amp;a,&amp;b)!=EOF)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(a&gt;b)&nbsp;swap(a,b);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ll&nbsp;ba=solve(a);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ll&nbsp;bb=solve(b);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%lld\n",bb-ba);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div></p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/167838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-03-14 08:48 <a href="http://www.cppblog.com/cxiaojia/archive/2012/03/14/167838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ural 1071. Nikifor 2 解题报告</title><link>http://www.cppblog.com/cxiaojia/archive/2012/03/08/167407.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Thu, 08 Mar 2012 07:47:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/03/08/167407.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/167407.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/03/08/167407.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/167407.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/167407.html</trackback:ping><description><![CDATA[水题。<br />从k=2开始枚举，一直枚举到x。<br /><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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><br /><br /><span style="color: #0000FF; ">bool</span>&nbsp;comp(<span style="color: #0000FF; ">int</span>&nbsp;x,<span style="color: #0000FF; ">int</span>&nbsp;y,<span style="color: #0000FF; ">int</span>&nbsp;k)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;temp1,temp2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(y!=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp1=y%k;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y/=k;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(x!=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp2=x%k;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(temp1==temp2)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x/=k;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(x==0)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x/=k;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />}<br /><br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;x,y;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d&nbsp;%d",&amp;x,&amp;y);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;k=2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(;k&lt;=x;k++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(comp(x,y,k))&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(k&gt;x)&nbsp;printf("No&nbsp;solution\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;printf("%d\n",k);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div> <img src ="http://www.cppblog.com/cxiaojia/aggbug/167407.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-03-08 15:47 <a href="http://www.cppblog.com/cxiaojia/archive/2012/03/08/167407.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdu 4163 Stock Prices 解题报告</title><link>http://www.cppblog.com/cxiaojia/archive/2012/03/06/167228.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Tue, 06 Mar 2012 02:48:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/03/06/167228.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/167228.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/03/06/167228.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/167228.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/167228.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">水题。</span></p>  <p><span style="font-family:宋体;">题意：给你每天的股价，让你找出最小的</span>K1<span style="font-family:宋体;">个股价，然后按日期从小到大排序输出，找出最大的</span>k2<span style="font-family:宋体;">个股价，按日期从大到小输出。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;">我用了</span>4<span style="font-family:宋体;">个</span>sort<span style="font-family:宋体;">。<br /><br /><br /></span></p><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&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;algorithm&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br />typedef&nbsp;<span style="color: #0000FF; ">struct</span><br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;p,d;<br />}Data;<br />Data&nbsp;dt[1000003];<br /><br /><span style="color: #0000FF; ">bool</span>&nbsp;cmp1(Data&nbsp;d1,Data&nbsp;d2)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(d1.p==d2.p)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;d1.d&lt;d2.d;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;d1.p&lt;d2.p;<br />}<br /><span style="color: #0000FF; ">bool</span>&nbsp;cmp2(Data&nbsp;d1,Data&nbsp;d2)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(d1.p==d2.p)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;d1.d&gt;d2.d;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;d1.p&gt;d2.p;<br />}<br /><span style="color: #0000FF; ">bool</span>&nbsp;cmp3(Data&nbsp;d1,Data&nbsp;d2)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;d1.d&lt;d2.d;<br />}<br /><span style="color: #0000FF; ">bool</span>&nbsp;cmp4(Data&nbsp;d1,Data&nbsp;d2)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;d1.d&gt;d2.d;<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;print()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cnt=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("Case&nbsp;%d\n",++cnt);<br />}<br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,k1,k2;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d&nbsp;%d&nbsp;%d",&amp;n,&amp;k1,&amp;k2),n&amp;&amp;k1&amp;&amp;k2)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;dt[i].p);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dt[i].d=i+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(dt,dt+n,cmp1);<span style="color: #008000; ">//</span><span style="color: #008000; ">从小到大排序</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print();<span style="color: #008000; ">//</span><span style="color: #008000; ">忽略</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(dt,dt+k1,cmp3);<span style="color: #008000; ">//</span><span style="color: #008000; ">日期的字典序从小到大</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d",dt[0].d);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;k1;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("&nbsp;%d",dt[i].d);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(dt,dt+n,cmp2);<span style="color: #008000; ">//</span><span style="color: #008000; ">从大到小排序</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(dt,dt+k2,cmp4);<span style="color: #008000; ">//</span><span style="color: #008000; ">日期的字典序从大到小</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d",dt[0].d);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;k2;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("&nbsp;%d",dt[i].d);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("\n");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><p>&nbsp;</p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/167228.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-03-06 10:48 <a href="http://www.cppblog.com/cxiaojia/archive/2012/03/06/167228.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hdu 4165 Pills 解题报告</title><link>http://www.cppblog.com/cxiaojia/archive/2012/03/05/167167.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Mon, 05 Mar 2012 05:49:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/03/05/167167.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/167167.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/03/05/167167.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/167167.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/167167.html</trackback:ping><description><![CDATA[<div><p>DP或卡特兰数<span style="font-family:宋体;">。</span></p>  <p><span style="font-family:宋体;">弱爆了。做题的时候只想着用一个状态去做，结果悲剧了。后来成哥提醒用二维的，我才发现得用两个状态去写。哎，怎么没想到两个状态呢。<br />题意：在一个瓶子里有N片药，每次吃半片，从瓶子里可能拿出整片，也可能拿出半片，如果拿出整片，记为W，半片记为H。问有多少种排列。</span></p>  <p><span style="font-family:宋体;">第一个状态：完整药片的数量。第二个状态：半片药片的数量。</span></p>  <p>F<span style="font-family:宋体;">（</span>i<span style="font-family:宋体;">，</span>j<span style="font-family:宋体;">）</span>=f<span style="font-family:宋体;">（</span>i-1,j+1<span style="font-family:宋体;">）</span>+f<span style="font-family:宋体;">（</span>I<span style="font-family:宋体;">，</span>j-1<span style="font-family:宋体;">）；</span></p>  <p><span style="font-family:宋体;">当吃的是整片时，</span>i-1<span style="font-family:宋体;">，半片的增加一个，</span>j+1<span style="font-family:宋体;">。</span></p>  <p><span style="font-family:宋体;">当吃的是半片时，</span>i<span style="font-family:宋体;">不变，</span>j-1<span style="font-family:宋体;">。</span></p>  <p><span style="font-family:宋体;">用两个状态写的时候这个题就很水了。不过提交的时候在</span>g++<span style="font-family:宋体;">下用</span>lang lang WA<span style="font-family:宋体;">，改成</span>int64<span style="font-family:宋体;">在</span>C++<span style="font-family:宋体;">下提交就</span>AC<span style="font-family:宋体;">了。很是不解。<br /><br />卡特兰数的方法就不多说了。。。。你懂的。。</span></p><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&lt;iostream&gt;<br />#include&lt;cstring&gt;<br />#include&lt;cstdio&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br />__int64&nbsp;f[33][33];<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(f,0,<span style="color: #0000FF; ">sizeof</span>(f));<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;k=30;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;k;i++)&nbsp;f[1][i]=i+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=2;i&lt;=30;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i][0]=f[i-1][1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=1;j&lt;k;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i][j]=f[i][j-1]+f[i-1][j+1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;s;<br />&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d",&amp;s),s)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%I64d\n",f[s][0]);<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><p>&nbsp;</p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/167167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-03-05 13:49 <a href="http://www.cppblog.com/cxiaojia/archive/2012/03/05/167167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ural 1098. Questions 解题报告</title><link>http://www.cppblog.com/cxiaojia/archive/2012/03/02/166995.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Fri, 02 Mar 2012 09:09:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/03/02/166995.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/166995.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/03/02/166995.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/166995.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/166995.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">题看不懂，在网上找到的翻译。就是整个串（不是整行）的约瑟夫环。<br /><br /></span></p><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&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br />&nbsp;<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><br /><span style="color: #0000FF; ">char</span>&nbsp;str[30003];<br /><span style="color: #0000FF; ">int</span>&nbsp;Josephus(<span style="color: #0000FF; ">int</span>&nbsp;n,<span style="color: #0000FF; ">int</span>&nbsp;m,<span style="color: #0000FF; ">int</span>&nbsp;k&nbsp;)&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">分别为：人数，出圈步长，起使报数位置,</span><span style="color: #008000; "><br /></span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;x=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(m&nbsp;==&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;k&nbsp;==&nbsp;1&nbsp;?&nbsp;n&nbsp;:&nbsp;(k&nbsp;+&nbsp;n&nbsp;-&nbsp;1)&nbsp;%&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;((k&nbsp;+&nbsp;m)&nbsp;&lt;&nbsp;i)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;(i&nbsp;-&nbsp;k&nbsp;+&nbsp;1)&nbsp;/&nbsp;(m&nbsp;-&nbsp;1)&nbsp;-&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(i&nbsp;+&nbsp;x&nbsp;&lt;&nbsp;n){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;i&nbsp;+&nbsp;x;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;(k&nbsp;+&nbsp;m&nbsp;*&nbsp;x);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;k&nbsp;+&nbsp;m&nbsp;*&nbsp;(n&nbsp;-&nbsp;i)&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;(k&nbsp;+&nbsp;m&nbsp;-&nbsp;1)&nbsp;%&nbsp;i&nbsp;+&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;k;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">返回最后一人的位置</span><span style="color: #008000; "><br /></span>&nbsp;}<br /><br />&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()<br />&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">freopen("in.txt","r",stdin);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;len=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%c",&amp;str[0])!=EOF)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(str[0]&gt;='&nbsp;')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str[++len]=str[0];<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;k=Josephus(len,1999,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(str[k]=='?')<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("Yes\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(str[k]=='&nbsp;')<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("No\n");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("No&nbsp;comments\n");<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />&nbsp;}</div><p>&nbsp;</p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/166995.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-03-02 17:09 <a href="http://www.cppblog.com/cxiaojia/archive/2012/03/02/166995.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ural1095. Nikifor 3 解题报告</title><link>http://www.cppblog.com/cxiaojia/archive/2012/03/01/166858.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Thu, 01 Mar 2012 05:50:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/03/01/166858.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/166858.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/03/01/166858.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/166858.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/166858.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">题目保证至少有一个</span>1<span style="font-family:宋体;">、</span>2<span style="font-family:宋体;">、</span>3<span style="font-family:宋体;">、</span>4<span style="font-family:宋体;">。说明这四个数是一个突破点。由此可以联想到以</span>1<span style="font-family:宋体;">、</span>2<span style="font-family:宋体;">、</span>3<span style="font-family:宋体;">、</span>4<span style="font-family:宋体;">四个数字结尾的数保证能被</span>7<span style="font-family:宋体;">整除。这样不论前边的数怎样排列，后边四个数总有一种组合能够保证整体可以被</span>7<span style="font-family:宋体;">整除。<br /><br /></span></p><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&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;cstring&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;z[7]={4123,1324,1234,2341,1243,3421,3142};<br /><span style="color: #0000FF; ">char</span>&nbsp;s[23];<br /><span style="color: #0000FF; ">int</span>&nbsp;ns[23];<br /><span style="color: #0000FF; ">int</span>&nbsp;num0_9[10];<br /><span style="color: #0000FF; ">int</span>&nbsp;atoi(<span style="color: #0000FF; ">char</span>&nbsp;s)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;s-'0';<br />}<br /><span style="color: #0000FF; ">int</span>&nbsp;fun(<span style="color: #0000FF; ">int</span>&nbsp;x,<span style="color: #0000FF; ">int</span>&nbsp;num)<span style="color: #008000; ">//</span><span style="color: #008000; ">把前边的数排列成新数</span><span style="color: #008000; "><br /></span>{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;num0_9[num];i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ns[x+i]=num;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;x+num0_9[num];<br />}<br /><span style="color: #0000FF; ">int</span>&nbsp;fun2(<span style="color: #0000FF; ">int</span>&nbsp;x)<span style="color: #008000; ">//</span><span style="color: #008000; ">求前边的数除以7的余数</span><span style="color: #008000; "><br /></span>{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;yu=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;x;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yu=(yu*10+ns[i])%7;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;yu;<br />}<br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;t);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(t--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(num0_9,0,<span style="color: #0000FF; ">sizeof</span>(num0_9));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%s",s);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;slen=strlen(s);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">统计每个数的个数</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;slen;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;num=atoi(s[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num0_9[num]++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">减去1、2、3、4</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;=4;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num0_9[i]--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">求前边组成的新数</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;x=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;=9;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x=fun(x,i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;yu=fun2(x);<span style="color: #008000; ">//</span><span style="color: #008000; ">求新数除以7的余数</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">找到一种组合可以与前边的数组合起来被7整除</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i=0;i&lt;7;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>((yu*10000+z[i])%7==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">输出，后边可以补上0</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=0;j&lt;x;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d",ns[j]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d",z[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=0;j&lt;num0_9[0];j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("0");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("\n");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><p>&nbsp;</p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/166858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-03-01 13:50 <a href="http://www.cppblog.com/cxiaojia/archive/2012/03/01/166858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zoj 3576 NYOJ 470 Count the Length 解题报告</title><link>http://www.cppblog.com/cxiaojia/archive/2012/02/29/166812.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Wed, 29 Feb 2012 13:03:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/02/29/166812.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/166812.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/02/29/166812.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/166812.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/166812.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">简单数学。</span></p>  <p><span style="font-family:宋体;">题意是给定长和宽，求对角线红色区域的长度和。</span></p>  <p><span style="font-family:宋体;">把</span>m,n<span style="font-family:宋体;">都除以他们的最大公约数</span>t<span style="font-family:宋体;">，使</span>tm=m/t,tn=n/t<span style="font-family:宋体;">，新</span>tm<span style="font-family:宋体;">，</span>tn<span style="font-family:宋体;">所组成的矩形的对角线长度</span>*t<span style="font-family:宋体;">就是原矩形的对角线长度。</span></p>  <p><span style="font-family:宋体;">把对角线平均分成</span>tm*tn<span style="font-family:宋体;">条线段，对角线与每条线段的交点必在</span>tm*tn<span style="font-family:宋体;">份中的线段的端点上（可利用相似三角形证明，这里省略）。</span></p>  <p><span style="font-family:宋体;">观察可以看出如果</span>tm<span style="font-family:宋体;">和</span>tn<span style="font-family:宋体;">有一个是偶数，则红色线段的数量和蓝色线段的数量相等，如果</span>tm<span style="font-family:宋体;">和</span>tn<span style="font-family:宋体;">都是奇数，则红色线段的数量</span>=<span style="font-family:宋体;">蓝色线段的数量</span>+1<span style="font-family:宋体;">，这样根据比例就可以求出红色线段的长度了。<br /></span></p><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&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;cmath&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br />typedef&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;ll;<br />ll&nbsp;gcd(ll&nbsp;m,ll&nbsp;n)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!n)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;m;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;gcd(n,m%n);<br />}<br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ll&nbsp;m,n,tm,tn,t;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%lld&nbsp;%lld",&amp;m,&amp;n)!=EOF)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tm=m&gt;n?m:n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tn=m&lt;n?m:n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t=gcd(m,n);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tm/=t;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tn/=t;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(tm%2==0||tn%2==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%.3lf\n",sqrt((<span style="color: #0000FF; ">double</span>)(tm*tm+tn*tn))/2*t);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">double</span>&nbsp;ans;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=sqrt((<span style="color: #0000FF; ">double</span>)(tm*tm+tn*tn))*(tm*tn+1)/(2*tm*tn)*t;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%.3lf\n",ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><p>&nbsp;</p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/166812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-02-29 21:03 <a href="http://www.cppblog.com/cxiaojia/archive/2012/02/29/166812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zoj 3573 Under Attack 解题报告</title><link>http://www.cppblog.com/cxiaojia/archive/2012/02/26/166539.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Sun, 26 Feb 2012 02:35:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/02/26/166539.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/166539.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/02/26/166539.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/166539.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/166539.html</trackback:ping><description><![CDATA[<div><p><span style="font-family:宋体;">巧妙数组或者一维线段树。<br />比赛时没有仔细看题，结束标记写错了，导致</span>TLE<span style="font-family:宋体;">了两次。大致意思是，线段树长度</span>[0,len]<span style="font-family:宋体;">，初始化为</span>0<span style="font-family:宋体;">，插入区间增量，最后求两个最大值的位置，一个是从左到右的最大值（遇到的第一个最大值即为所求），一个是从右到左的最大值。<br />好长时间没写线段树的原因，导致我直接上模板了，结构体变量有点多，写的不是很好，代码很长。正式比赛中第一个线段树。<br />后来听说有O（n）的算法，突然就想起来了学校oj上有一道巧妙运用数组的题，然后感觉用数组可以搞，试了一下AC掉了，时间1900+，比线段树的5000+少多了。。<br />。<br />数组代码：<br /></span><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&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;cstring&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MAXM=15003;<br /><span style="color: #0000FF; ">int</span>&nbsp;a[MAXM];<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d",&amp;n)!=EOF)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;l,r,b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(a,0,<span style="color: #0000FF; ">sizeof</span>(a));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d&nbsp;%d&nbsp;%d",&amp;l,&amp;r,&amp;b))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(l==-1)&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[l]+=b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[r+1]-=b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;lmax=a[0],posl=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;=n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[i]+=a[i-1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(lmax&lt;a[i])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lmax=a[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;posl=i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;posr;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=n;i&gt;=0;i--)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(a[i]==lmax)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;posr=i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d&nbsp;%d\n",posl,posr);<br />&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><span style="font-family:宋体;"><br /><br /><br />线段树代码：<br /><br /></span></p><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&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br />inline&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;L(<span style="color: #0000FF; ">int</span>&nbsp;r){<span style="color: #0000FF; ">return</span>&nbsp;r&lt;&lt;1;}<br />inline&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;R(<span style="color: #0000FF; ">int</span>&nbsp;r){<span style="color: #0000FF; ">return</span>&nbsp;(r&lt;&lt;1)+1;}<br />inline&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MID(<span style="color: #0000FF; ">int</span>&nbsp;l,<span style="color: #0000FF; ">int</span>&nbsp;r){<span style="color: #0000FF; ">return</span>&nbsp;(l+r)&gt;&gt;1;}<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MAXN=15003;<br />typedef&nbsp;<span style="color: #0000FF; ">struct</span><br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;left,right;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;_max,posl,posr;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;add;<br />}Node;<br />Node&nbsp;tree[MAXN*4];<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">int&nbsp;arr[MAXN];</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">void</span>&nbsp;Create(<span style="color: #0000FF; ">int</span>&nbsp;l,<span style="color: #0000FF; ">int</span>&nbsp;r,<span style="color: #0000FF; ">int</span>&nbsp;root)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root].left=l;<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root].right=r;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(l==r)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root]._max=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root].posl=l;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root].posr=r;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root].add=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;mid=MID(l,r);<br />&nbsp;&nbsp;&nbsp;&nbsp;Create(l,mid,L(root));<br />&nbsp;&nbsp;&nbsp;&nbsp;Create(mid+1,r,R(root));<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root]._max=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root].posl=l;<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root].posr=r;<br />&nbsp;&nbsp;&nbsp;&nbsp;tree[root].add=0;<br />}<br /><span style="color: #0000FF; ">void</span>&nbsp;Update_info(<span style="color: #0000FF; ">int</span>&nbsp;node)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(tree[node].add)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[L(node)].add+=tree[node].add;<span style="color: #008000; ">//</span><span style="color: #008000; ">更新子树时会用到</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[R(node)].add+=tree[node].add;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[L(node)]._max+=tree[node].add;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[R(node)]._max+=tree[node].add;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[node].add=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br /><span style="color: #0000FF; ">void</span>&nbsp;Updata(<span style="color: #0000FF; ">int</span>&nbsp;l,<span style="color: #0000FF; ">int</span>&nbsp;r,<span style="color: #0000FF; ">int</span>&nbsp;val,<span style="color: #0000FF; ">int</span>&nbsp;root)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(l&lt;=tree[root].left&amp;&amp;tree[root].right&lt;=r)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root].add+=val;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root]._max+=val;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;Update_info(root);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(tree[root].left==tree[root].right)&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;mid=(tree[root].left+tree[root].right)&gt;&gt;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(l&gt;mid)&nbsp;Updata(l,r,val,(root&lt;&lt;1)+1);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(r&lt;=mid)&nbsp;Updata(l,r,val,root&lt;&lt;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Updata(l,mid,val,root&lt;&lt;1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Updata(mid+1,r,val,(root&lt;&lt;1)+1);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(tree[L(root)]._max&gt;tree[R(root)]._max)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root]._max=tree[L(root)]._max;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root].posl=tree[L(root)].posl;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root].posr=tree[L(root)].posr;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>(tree[L(root)]._max==tree[R(root)]._max)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root]._max=tree[L(root)]._max;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root].posl=tree[L(root)].posl;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root].posr=tree[R(root)].posr;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root]._max=tree[R(root)]._max;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root].posl=tree[R(root)].posl;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tree[root].posr=tree[R(root)].posr;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br /><br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d",&amp;n)!=EOF)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;l,r,b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create(0,n,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d&nbsp;%d&nbsp;%d",&amp;l,&amp;r,&amp;b))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(l==-1)&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Updata(l,r,b,1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d&nbsp;%d\n",tree[1].posl,tree[1].posr);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><p>&nbsp;</p></div> <img src ="http://www.cppblog.com/cxiaojia/aggbug/166539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-02-26 10:35 <a href="http://www.cppblog.com/cxiaojia/archive/2012/02/26/166539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ural 1119. Metro NYOJ 195 飞翔 解题报告</title><link>http://www.cppblog.com/cxiaojia/archive/2012/02/25/166466.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Sat, 25 Feb 2012 00:50:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/02/25/166466.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/166466.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/02/25/166466.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/166466.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/166466.html</trackback:ping><description><![CDATA[<div><p>DP<span style="font-family:宋体;">。</span></p>  <p style="margin-left:21.0pt;text-indent:-21.0pt;">１、<span style="font-family: 宋体;">每一行最多只可以走一次捷径，每一列也是最多只可以走一次捷径</span></p>  <p style="margin-left:21.0pt;text-indent:-21.0pt;">２、<span style="font-family: 宋体;">每次走过捷径后的横坐标和纵坐标都要大于之前的坐标</span></p>  <p><span style="font-family:宋体;">只要求出从起点到终点所经过的最多的捷径，就能得到最少的路程。每一步的最优解用之前走过的路径所求，满足无后效性，每一个子状态都可以求出最优解，满足最优子结构，可以用</span>dp<span style="font-family:宋体;">解决。</span></p>  <p>f[i]=max(f[j]+1,f[i]);</p>  <p><span style="font-family:宋体;">当</span>j<span style="font-family:宋体;">点坐标小于点，</span>i<span style="font-family:宋体;">点为捷径时，走到</span>i<span style="font-family:宋体;">点坐标时经过的最多捷径数</span>=max(<span style="font-family:宋体;">走到</span>j<span style="font-family:宋体;">点的最多捷径数</span>+1<span style="font-family:宋体;">，走到</span>i<span style="font-family:宋体;">点时的最多捷径数</span>)</p>  <p><span style="font-family:宋体;">最后找出最大的</span>f(i)<span style="font-family:宋体;">就是能经过最多的捷径</span></p>  <p><span style="font-family:宋体;">注意坐标的输入没有顺序性，要进行排列。<br /><br /></span><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&nbsp;&lt;iostream&gt;<br />#include&nbsp;&lt;cstring&gt;<br />#include&nbsp;&lt;algorithm&gt;<br />#include&nbsp;&lt;cmath&gt;<br />#include&nbsp;&lt;cstdio&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MAXN=1003;<br />typedef&nbsp;<span style="color: #0000FF; ">struct</span><br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a,b;<br />}point;<br />point&nbsp;p[MAXN];<br /><span style="color: #0000FF; ">int</span>&nbsp;f[1003];<br /><span style="color: #0000FF; ">bool</span>&nbsp;cmp(point&nbsp;p1,point&nbsp;p2)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(p1.a==p2.a)&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;p1.b&lt;p2.b;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;p1.a&lt;p2.a;<br />}<br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">freopen("1.in","r",stdin);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;m,n;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(cin&gt;&gt;n&gt;&gt;m)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;k;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&gt;&gt;k;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;k;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cin&gt;&gt;p[i].a&gt;&gt;p[i].b;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i]=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(p,p+k,cmp);<span style="color: #008000; ">//</span><span style="color: #008000; ">如果横坐标相等，按照纵坐标从小到大排序，否则按照横坐标从小到大排序</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;v=0,flag=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">dp</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;k;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=0;j&lt;=i;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(p[i].a&gt;p[j].a)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(p[i].b&gt;p[j].b)&nbsp;f[i]=max(f[j]+1,f[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">求用到最多捷径的点</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ma=*max_element(f,f+k);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;(<span style="color: #0000FF; ">int</span>)((m+n-2*ma)*100+ma*100*sqrt(2.0)+0.5)&lt;&lt;endl;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div></p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/166466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-02-25 08:50 <a href="http://www.cppblog.com/cxiaojia/archive/2012/02/25/166466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ural 1146. Maximum Sum NYOJ 104 最大和 解题报告</title><link>http://www.cppblog.com/cxiaojia/archive/2012/02/24/ural1146.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Fri, 24 Feb 2012 08:58:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/02/24/ural1146.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/166439.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/02/24/ural1146.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/166439.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/166439.html</trackback:ping><description><![CDATA[<div><p>a[i][j]=a[i-1][j]+among;<span style="font-family:宋体;">这样存值的话就可以转化成求</span> <span style="font-family:宋体;">和最大连续子串<br /></span></p><div><table border="1" cellspacing="0" cellpadding="0" align="left" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: white; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-top-style: solid; border-top-color: gray; border-top-width: 1pt; margin-left: 6.75pt; margin-right: 6.75pt; background-position: initial initial; background-repeat: initial initial; ">  <tbody><tr style="   height:25.15pt">   <td width="62" style="width:46.2pt;border-top:solid #DDDDDD 1.0pt;border-left:   none;border-bottom:none;border-right:solid #DDDDDD 1.0pt;background:#F4F4F4;   padding:1.35pt 4.1pt 1.35pt 4.1pt;height:25.15pt">   <p align="center" style="text-align:center;"><span style="font-size: 9.5pt; font-family: Arial, sans-serif; ">0.031</span></p>   </td>   <td width="69" style="width:51.6pt;border-top:solid #DDDDDD 1.0pt;border-left:   none;border-bottom:none;border-right:solid #DDDDDD 1.0pt;background:#F4F4F4;   padding:1.35pt 4.1pt 1.35pt 4.1pt;height:25.15pt">   <p align="center" style="text-align:center;"><span style="font-size: 9.5pt; font-family: Arial, sans-serif; ">156 KB</span></p>   </td>  </tr></tbody></table></div><span style="font-family:宋体;"><br /><br /><br /></span><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 />--><br />#include&lt;iostream&gt;<br />#include&lt;cstdio&gt;<br />#include&lt;cstring&gt;<br /><span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;std;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;INF=0x7fffffff-1;<br /><span style="color: #0000FF; ">int</span>&nbsp;a[103][103];<br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(a,0,<span style="color: #0000FF; ">sizeof</span>(a));<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n,among;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(scanf("%d",&amp;n)!=EOF)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=1;i&lt;=n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=1;j&lt;=n;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;among);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[i][j]=a[i-1][j]+among;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;ans=-INF;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;n;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;j=i+1;j&lt;=n;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;maxnum=a[j][1]-a[i][1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=max(maxnum,ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;k=2;k&lt;=n;k++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(a[j][k]-a[i][k]+maxnum&lt;a[j][k]-a[i][k])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxnum=a[j][k]-a[i][k];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=max(maxnum,ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxnum+=a[j][k]-a[i][k];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans=max(maxnum,ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",ans);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}</div><p>&nbsp;</p></div><img src ="http://www.cppblog.com/cxiaojia/aggbug/166439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-02-24 16:58 <a href="http://www.cppblog.com/cxiaojia/archive/2012/02/24/ural1146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NYOJ 136 等式 解题报告</title><link>http://www.cppblog.com/cxiaojia/archive/2012/01/30/nyoj136.html</link><dc:creator>C小加</dc:creator><author>C小加</author><pubDate>Sun, 29 Jan 2012 17:40:00 GMT</pubDate><guid>http://www.cppblog.com/cxiaojia/archive/2012/01/30/nyoj136.html</guid><wfw:comment>http://www.cppblog.com/cxiaojia/comments/164665.html</wfw:comment><comments>http://www.cppblog.com/cxiaojia/archive/2012/01/30/nyoj136.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cxiaojia/comments/commentRss/164665.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cxiaojia/services/trackbacks/164665.html</trackback:ping><description><![CDATA[哈希。把<span style="color: #464646; font-family: Tahoma, Arial, sans-serif, simsun; background-color: #ffffff; ">a1*x1</span><sup style="color: #464646; font-family: Tahoma, Arial, sans-serif, simsun; background-color: #ffffff; ">3</sup><span style="color: #464646; font-family: Tahoma, Arial, sans-serif, simsun; background-color: #ffffff; ">+a2*x2</span><sup style="color: #464646; font-family: Tahoma, Arial, sans-serif, simsun; background-color: #ffffff; ">3</sup><span style="color: #464646; font-family: Tahoma, Arial, sans-serif, simsun; background-color: #ffffff; ">的所有情况存储在哈希表中，然后用</span>a3*x3<sup>3</sup>+a4*x4<sup>3</sup>+a5*x5<sup>3</sup>去表中查找和为0的情况。用数组暴力的话会超内存。<sup style="color: #464646; font-family: Tahoma, Arial, sans-serif, simsun; background-color: #ffffff; "><br /></sup>这个题很久以前做过，虽然AC了但是错的。之前做的时候觉得有一组数据超int了（老是RE），而且当时认为只有这一组数据超了，所以当时就把这组数据进行特殊化处理了。后来小牛找出了问题我才意识到根本没有超出int，我去掉特殊化处理后提交TLE，不是RE，我开始纠结当时到底是怎么做的。<br />我重新检查了一遍代码，发现我的哈希算法加上那组特殊数据，时间复杂度O（n*m），n达到100万，m达到1万。这时间伤不起啊。后来想想哈希还可以优化，于是我就改了一下哈希算法，复杂度降低到了O（n），最终也顺利AC。<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp;<br />#include&nbsp;&lt;cstdio&gt;<br />#include&nbsp;&lt;cmath&gt;<br />#include&nbsp;&lt;cstdlib&gt;<br />#include&nbsp;&lt;cstring&gt;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MAX=100003;<br /><span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;MAXSUM=12500000;<br /><span style="color: #0000FF; ">int</span>&nbsp;a[1003];<br /><br /><span style="color: #0000FF; ">void</span>&nbsp;g()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=-50;i&lt;=50;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[i+50]=i*i*i;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />template&nbsp;&lt;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;<br /><span style="color: #0000FF; ">class</span>&nbsp;hash<br />{<br /><span style="color: #0000FF; ">private</span>:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;pos;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;next[MAX];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;head[MAX];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;key[MAX];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;cnt[MAX];<br /><span style="color: #0000FF; ">public</span>:<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;count;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;search(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;x);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;search1(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;x);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;push(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;x);<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;clear();<br /><br />};<br /><br />template&nbsp;&lt;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;<br />inline&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;hash&lt;T&gt;::search1(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;temp=abs(x)%MAX;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t=head[temp];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(t!=-1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(x==key[t])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cnt[t]++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t=next[t];<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br />}<br /><br />template&nbsp;&lt;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;<br />inline&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;hash&lt;T&gt;::search(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;temp=abs(x)%MAX;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;t=head[temp];<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(t!=-1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(x==-key[t])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count+=cnt[t];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t=next[t];<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />template&nbsp;&lt;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;<br />inline&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;hash&lt;T&gt;::push(<span style="color: #0000FF; ">const</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;x)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(search1(x))&nbsp;<span style="color: #0000FF; ">return</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;temp=abs(x)%MAX;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(head[temp]!=-1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next[pos]=head[temp];<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;head[temp]=pos;<br />&nbsp;&nbsp;&nbsp;&nbsp;key[pos]=x;<br />&nbsp;&nbsp;&nbsp;&nbsp;cnt[pos]=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;pos++;<br />}<br />template&nbsp;&lt;<span style="color: #0000FF; ">class</span>&nbsp;T&gt;<br /><span style="color: #0000FF; ">void</span>&nbsp;hash&lt;T&gt;::clear()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;count=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;pos=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(next,-1,<span style="color: #0000FF; ">sizeof</span>(next));<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(head,-1,<span style="color: #0000FF; ">sizeof</span>(head));<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(cnt,0,<span style="color: #0000FF; ">sizeof</span>(cnt));<br />}<br />hash&lt;<span style="color: #0000FF; ">int</span>&gt;&nbsp;h;<br /><br /><span style="color: #0000FF; ">int</span>&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">freopen("in.txt","r",stdin);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;T;<br />&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&amp;T);<br />&nbsp;&nbsp;&nbsp;&nbsp;memset(a,0,<span style="color: #0000FF; ">sizeof</span>(0));<br />&nbsp;&nbsp;&nbsp;&nbsp;g();<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(T--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h.clear();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;a1,a2,a3,a4,a5;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;i,j,k;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d%d%d",&amp;a1,&amp;a2,&amp;a3,&amp;a4,&amp;a5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i=-50;i&lt;=50;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(j=-50;i!=0&amp;&amp;j&lt;=50;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(j==0)&nbsp;<span style="color: #0000FF; ">continue</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n=a1*a[i+50]+a2*a[j+50];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h.push(n);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(i=-50;i&lt;=50;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(j=-50;i!=0&amp;&amp;j&lt;=50;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(k=-50;j!=0&amp;&amp;k&lt;=50;k++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(k==0)&nbsp;<span style="color: #0000FF; ">continue</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n=a3*a[i+50]+a4*a[j+50]+a5*a[k+50];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(n&nbsp;&gt;&nbsp;MAXSUM&nbsp;||&nbsp;n&nbsp;&lt;&nbsp;-MAXSUM)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h.search(n);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",h.count);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />}<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><img src ="http://www.cppblog.com/cxiaojia/aggbug/164665.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cxiaojia/" target="_blank">C小加</a> 2012-01-30 01:40 <a href="http://www.cppblog.com/cxiaojia/archive/2012/01/30/nyoj136.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>