﻿<?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++博客-Smile-文章分类-未解决题目</title><link>http://www.cppblog.com/Smile3/category/17323.html</link><description>Smile</description><language>zh-cn</language><lastBuildDate>Fri, 22 Jul 2011 10:08:47 GMT</lastBuildDate><pubDate>Fri, 22 Jul 2011 10:08:47 GMT</pubDate><ttl>60</ttl><item><title>usaco subset sums</title><link>http://www.cppblog.com/Smile3/articles/151099.html</link><dc:creator>Smile3</dc:creator><author>Smile3</author><pubDate>Fri, 15 Jul 2011 13:42:00 GMT</pubDate><guid>http://www.cppblog.com/Smile3/articles/151099.html</guid><wfw:comment>http://www.cppblog.com/Smile3/comments/151099.html</wfw:comment><comments>http://www.cppblog.com/Smile3/articles/151099.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Smile3/comments/commentRss/151099.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Smile3/services/trackbacks/151099.html</trackback:ping><description><![CDATA[<div><center> <strong> Subset Sums</strong><br /> <strong>JRM</strong> </center> <p> For many sets of consecutive integers from 1 through N (1 &lt;= N &lt;= 39), one can partition the set into two sets whose sums are identical.  </p><p> For example, if N=3, one can partition the set {1, 2, 3} in one way so that the sums of both subsets are identical: </p><ul><li>{3} and {1,2} </li></ul>  <p> This counts as a single partitioning (i.e., reversing the order counts as the same partitioning and thus does not increase the count of partitions).  </p><p> If N=7, there are four ways to partition the set {1, 2, 3, ... 7} so that each partition has the same sum: </p><ul><li>{1,6,7} and {2,3,4,5}         </li><li>{2,5,7} and {1,3,4,6}         </li><li>{3,4,7} and {1,2,5,6}         </li><li>{1,2,4,7} and {3,5,6} </li></ul>  <p> Given N,  your program should print the number of ways a set containing the integers from 1 through N can be partitioned into two sets whose sums are identical.  Print 0 if there are no such ways.  </p><p> Your program must calculate the answer, not look it up from a table. </p><h3>PROGRAM NAME: subset</h3> <h3>INPUT FORMAT</h3> The input file contains a single line with a single integer representing N, as above. <h3>SAMPLE INPUT (file subset.in)</h3> <pre>7<br /></pre> <h3>OUTPUT FORMAT</h3> <p> The output file contains a single line with a single integer that tells how many same-sum partitions can be made from the set {1, 2, ..., N}. The output file should contain 0 if there are no ways to make a same-sum partition. </p><h3>SAMPLE OUTPUT (file subset.out)</h3> <pre>4<br /><br />不是正解的方法<br /></pre></div><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">cstdio</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br /></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">cstring</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br /></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">ctime</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br /></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">cstdlib</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br /></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">typedef&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;LLong;<br /></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;max_length&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">40</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;arr[max_length];<br /></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;used[max_length&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;max_length];<br /></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;init(</span><span style="color: #0000ff;">void</span><span style="color: #000000;">);<br /></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;&nbsp;no_ans(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n);<br /></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">LLong&nbsp;&nbsp;dfs(LLong&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ans,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;cur,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;sum,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;tag,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;flg);<br /></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;init(</span><span style="color: #0000ff;">void</span><span style="color: #000000;">){<br /></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i;<br /></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;max_length;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br /></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">}<br /></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;no_ans(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n){<br /></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;n)&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;n&nbsp;&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">4</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">}<br /></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">LLong&nbsp;dfs(LLong&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ans,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;cur,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;sum,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;tag,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;flg){<br /></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(cur&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;n){<br /></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(flg&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;sum&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;tag)<br /></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ans&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;used[tag&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;sum];<br /></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">flg)<br /></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">used[sum];<br /></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ans;<br /></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;dfs(ans,&nbsp;cur&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;n,&nbsp;sum&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;arr[cur],&nbsp;tag,&nbsp;flg);<br /></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;dfs(ans,&nbsp;cur&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;n,&nbsp;sum,&nbsp;tag,&nbsp;flg);<br /></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">ans;<br /></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">}<br /></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main(</span><span style="color: #0000ff;">void</span><span style="color: #000000;">){<br /></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">fin,&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">fout;<br /></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n;<br /></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;LLong&nbsp;ans&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;0LL;<br /></span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;fin&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;fopen(</span><span style="color: #000000;">"</span><span style="color: #000000;">subset.in</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">r</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /></span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;fout&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;fopen(</span><span style="color: #000000;">"</span><span style="color: #000000;">subset.out</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">w</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br /></span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;fscanf(fin,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">%d</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">n);<br /></span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080;">49</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;init();<br /></span><span style="color: #008080;">50</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fout,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">%lld\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;no_ans(n)&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;:&nbsp;(dfs(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">ans,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;n&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;(</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;n)&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;n&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">4</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">,&nbsp;dfs(</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">ans,&nbsp;n&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">,&nbsp;n,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;(</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;n)&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;n&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">4</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">));<br /></span><span style="color: #008080;">51</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">52</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;fclose(fin);<br /></span><span style="color: #008080;">53</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;fclose(fout);<br /></span><span style="color: #008080;">54</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">55</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br /></span><span style="color: #008080;">56</span>&nbsp;<span style="color: #000000;">}</span></div><img src ="http://www.cppblog.com/Smile3/aggbug/151099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Smile3/" target="_blank">Smile3</a> 2011-07-15 21:42 <a href="http://www.cppblog.com/Smile3/articles/151099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>