﻿<?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++博客-harry12800</title><link>http://www.cppblog.com/harry12800/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 09 Jun 2026 18:54:20 GMT</lastBuildDate><pubDate>Tue, 09 Jun 2026 18:54:20 GMT</pubDate><ttl>60</ttl><item><title>PKU 1011 Sticks &amp;&amp;hdu 1455 sticks</title><link>http://www.cppblog.com/harry12800/archive/2011/09/08/155378.html</link><dc:creator>周国柱</dc:creator><author>周国柱</author><pubDate>Thu, 08 Sep 2011 12:02:00 GMT</pubDate><guid>http://www.cppblog.com/harry12800/archive/2011/09/08/155378.html</guid><wfw:comment>http://www.cppblog.com/harry12800/comments/155378.html</wfw:comment><comments>http://www.cppblog.com/harry12800/archive/2011/09/08/155378.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/harry12800/comments/commentRss/155378.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/harry12800/services/trackbacks/155378.html</trackback:ping><description><![CDATA[<span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="font-family: arial" class="Apple-style-span"><font color="#0000ff">#include &lt;iostream&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;cmath&gt;<br />#include &lt;algorithm&gt;<br />#include &lt;cstring&gt;<br /><strong>using namespace</strong></font> std<strong><font color="#ff00ff">;</font></strong><strong><font color="blue"><br />//三个剪枝<br />int</font></strong> a<strong><font color="#ff00ff">[</font></strong><font color="#cc3300">105</font><strong><font color="#ff00ff">],</font></strong>v<strong><font color="#ff00ff">,</font></strong>n<strong><font color="#ff00ff">;</font></strong><strong><font color="blue"><br />bool</font></strong> flag<strong><font color="#ff00ff">,</font></strong>us<strong><font color="#ff00ff">[</font></strong><font color="#cc3300">105</font><strong><font color="#ff00ff">];</font></strong><strong><font color="blue"><br /><br />void</font></strong> DFS<strong><font color="#ff00ff">(</font></strong><strong><font color="blue">int</font></strong> w<strong><font color="#ff00ff">,</font></strong><strong><font color="blue">int</font></strong> sum<strong><font color="#ff00ff">)<br />{</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp; if</font></strong><strong><font color="#ff00ff">(</font></strong>sum<strong><font color="#ff00ff"> ==</font></strong><font color="#cc3300"> 0</font><strong><font color="#ff00ff">)</font></strong>flag<strong><font color="#ff00ff">=</font></strong><font color="#cc3300"> false</font><strong><font color="#ff00ff">;</font></strong><font color="green">//找到；<br /></font><strong><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp; for</font></strong><strong><font color="#ff00ff">(</font></strong><strong><font color="blue">int</font></strong> i<strong><font color="#ff00ff"> =</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff"> ;</font></strong>i<strong><font color="#ff00ff"> &lt;</font></strong> n<strong><font color="#ff00ff">&amp;&amp;</font></strong>flag<strong><font color="#ff00ff">;</font></strong>i<strong><font color="#ff00ff">++)<br />&nbsp;&nbsp;&nbsp;&nbsp; {</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if</font></strong><strong><font color="#ff00ff">(!</font></strong>us<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">]&amp;&amp;</font></strong>w<strong><font color="#ff00ff">-</font></strong>a<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">]&gt;=</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; us<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">] =</font></strong><font color="#cc3300"> true</font><strong><font color="#ff00ff">;</font></strong><font color="green">//搜索的标记<br /></font><strong><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if</font></strong><strong><font color="#ff00ff">(</font></strong>w<strong><font color="#ff00ff">-</font></strong>a<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">]==</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">)</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DFS<strong><font color="#ff00ff">(</font></strong>v<strong><font color="#ff00ff">,</font></strong>sum<strong><font color="#ff00ff">-</font></strong>a<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">]);</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DFS<strong><font color="#ff00ff">(</font></strong>w<strong><font color="#ff00ff">-</font></strong>a<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">],</font></strong>sum<strong><font color="#ff00ff">-</font></strong>a<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">]);</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; us<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">]=</font></strong><font color="#cc3300"> false</font><strong><font color="#ff00ff">;</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if</font></strong><strong><font color="#ff00ff">(</font></strong>w<strong><font color="#ff00ff"> ==</font></strong> a<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">])</font></strong><strong><font color="#0000ff">return</font></strong><strong><font color="#ff00ff"> ;</font></strong><font color="green">//这个意思是如果剩余的要求的长度和目前的相同；已经做过了不行的话，意味这v是不符合的，不做了<br /></font><strong><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if</font></strong><strong><font color="#ff00ff">(</font></strong>w<strong><font color="#ff00ff"> ==</font></strong> v<strong><font color="#ff00ff"> &amp;&amp;</font></strong> a<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">] &lt;</font></strong> v<strong><font color="#ff00ff">)</font></strong><strong><font color="#0000ff">return</font></strong><strong><font color="#ff00ff"> ;</font></strong><font color="green">//这个意思是如果剩下的长度刚从v开始时，然而a[i]却比v小不行的话，那也是不行的，对不对？<br /></font><strong><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while</font></strong><strong><font color="#ff00ff">(</font></strong>a<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">]==</font></strong>a<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">+</font></strong><font color="#cc3300">1</font><strong><font color="#ff00ff">])</font></strong>i<strong><font color="#ff00ff">++;</font></strong><font color="green">//这个意思是如果a[i]长度的不符合，那这个长度的都没必要再做了<br /></font><strong><font color="#ff00ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />}</font></strong><strong><font color="blue"><br /><br />bool</font></strong> cmp<strong><font color="#ff00ff">(</font></strong><strong><font color="#0000ff">const</font></strong><strong><font color="blue"> int</font></strong><strong><font color="#ff00ff"> &amp;</font></strong>a<strong><font color="#ff00ff">,</font></strong><strong><font color="#0000ff">const</font></strong><strong><font color="blue"> int</font></strong><strong><font color="#ff00ff"> &amp;</font></strong>b<strong><font color="#ff00ff">){</font></strong><strong><font color="#0000ff">return</font></strong> a<strong><font color="#ff00ff">&gt;</font></strong>b<strong><font color="#ff00ff">;}</font></strong><font color="green">//排序规则；<br /></font><strong><font color="blue">int</font></strong><strong><font color="#0000ff"> main</font></strong><strong><font color="#ff00ff">()<br />{</font></strong><strong><font color="blue"><br />&nbsp;&nbsp;&nbsp; int</font></strong> sum<strong><font color="#ff00ff">,</font></strong>i<strong><font color="#ff00ff">;</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp; while</font></strong><strong><font color="#ff00ff">(</font></strong>scanf<strong><font color="#ff00ff">(</font></strong><font color="green">"%d"</font><strong><font color="#ff00ff">,&amp;</font></strong>n<strong><font color="#ff00ff">)&amp;&amp;</font></strong>n<strong><font color="#ff00ff">)<br />&nbsp;&nbsp;&nbsp; {</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flag<strong><font color="#ff00ff"> =</font></strong><font color="#cc3300"> true</font><strong><font color="#ff00ff">;</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum<strong><font color="#ff00ff"> =</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">;</font></strong><strong><font color="#0000ff">&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; for</font></strong><strong><font color="#ff00ff">(</font></strong>i<strong><font color="#ff00ff"> =</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff"> ;</font></strong>i<strong><font color="#ff00ff"> &lt;</font></strong>n<strong><font color="#ff00ff"> ;</font></strong>i<strong><font color="#ff00ff">++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf<strong><font color="#ff00ff">(</font></strong><font color="green">"%d"</font><strong><font color="#ff00ff">,&amp;</font></strong>a<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">]);</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum<strong><font color="#ff00ff">+=</font></strong>a<strong><font color="#ff00ff">[</font></strong>i<strong><font color="#ff00ff">];</font></strong><font color="green">//所有棍子总和长度<br /></font><strong><font color="#ff00ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sort<strong><font color="#ff00ff">(</font></strong>a<strong><font color="#ff00ff">,</font></strong>a<strong><font color="#ff00ff">+</font></strong>n<strong><font color="#ff00ff">,</font></strong>cmp<strong><font color="#ff00ff">);</font></strong><font color="green">//大到小排序&nbsp;&nbsp; 如果这里不从大到小排序也会<font color="#008000">Time Limit Exceeded</font><br /></font><strong><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for</font></strong><strong><font color="#ff00ff">(</font></strong>v<strong><font color="#ff00ff"> =</font></strong> a<strong><font color="#ff00ff">[</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">] ;</font></strong> v<strong><font color="#ff00ff"> &lt;=</font></strong> sum<strong><font color="#ff00ff">;</font></strong>v<strong><font color="#ff00ff">++)</font></strong><font color="green">// 从最长的长度开始找<br /></font><strong><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if</font></strong><strong><font color="#ff00ff">(</font></strong>sum<strong><font color="#ff00ff">%</font></strong>v<strong><font color="#ff00ff">==</font></strong><font color="#cc3300">0</font><strong><font color="#ff00ff">)</font></strong><font color="green">//能分成 sum/v 份，每份分成v的长度<br /></font><strong><font color="#ff00ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if</font></strong><strong><font color="#ff00ff">(</font></strong>sum<strong><font color="#ff00ff">==</font></strong>v<strong><font color="#ff00ff">)</font></strong>printf<strong><font color="#ff00ff">(</font></strong><font color="green">"%d\n"</font><strong><font color="#ff00ff">,</font></strong>sum<strong><font color="#ff00ff">);</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</font></strong><strong><font color="#ff00ff"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memset<strong><font color="#ff00ff">(</font></strong>us<strong><font color="#ff00ff">,</font></strong><font color="#cc3300">false</font><strong><font color="#ff00ff">,</font></strong><strong><font color="#0000ff">sizeof</font></strong><strong><font color="#ff00ff">(</font></strong>us<strong><font color="#ff00ff">));</font></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DFS<strong><font color="#ff00ff">(</font></strong>v<strong><font color="#ff00ff">,</font></strong>sum<strong><font color="#ff00ff">);</font></strong><font color="green">//深度搜索v长度的是否符合<br /></font><strong><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if</font></strong><strong><font color="#ff00ff">(!</font></strong>flag<strong><font color="#ff00ff">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</font></strong><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; printf<strong><font color="#ff00ff">(</font></strong><font color="green">"%d\n"</font><strong><font color="#ff00ff">,</font></strong>v<strong><font color="#ff00ff">);</font></strong><strong><font color="#0000ff"><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; break</font></strong><strong><font color="#ff00ff">;</font></strong><font color="green">//找到就退出<br /></font><strong><font color="#ff00ff">&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; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</font></strong><strong><font color="#0000ff"><br />&nbsp;&nbsp;&nbsp; return</font></strong><font color="#cc3300"> 0</font><strong><font color="#ff00ff">;<br />}</font></strong></span></span><img src ="http://www.cppblog.com/harry12800/aggbug/155378.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/harry12800/" target="_blank">周国柱</a> 2011-09-08 20:02 <a href="http://www.cppblog.com/harry12800/archive/2011/09/08/155378.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>