{"id":205,"date":"2010-04-03T13:20:00","date_gmt":"2010-04-03T05:20:00","guid":{"rendered":"http:\/\/localhost\/?p=205"},"modified":"2010-04-03T13:20:00","modified_gmt":"2010-04-03T05:20:00","slug":"scoi2008_coloring_scheme","status":"publish","type":"post","link":"https:\/\/www.shuizilong.com\/wjmzbmr\/?p=205","title":{"rendered":"[SCOI2008]\u7740\u8272\u65b9\u6848"},"content":{"rendered":"\n<p>[SCOI2008]\u7740\u8272\u65b9\u6848<\/p>\n<p>Time Limit:10000MS&#160; Memory Limit:165536K<br \/>Total Submit:20 Accepted:16 <br \/>Case Time Limit:1000MS<\/p>\n<p><strong>Description <\/strong><\/p>\n<p> \u6709n\u4e2a\u6728\u5757\u6392\u6210\u4e00\u884c\uff0c\u4ece\u5de6\u5230\u53f3\u4f9d\u6b21\u7f16\u53f7\u4e3a1~n\u3002\u4f60\u6709k\u79cd\u989c\u8272\u7684\u6cb9\u6f06\uff0c\u5176\u4e2d\u7b2ci\u79cd\u989c\u8272\u7684\u6cb9\u6f06\u8db3\u591f\u6d82ci\u4e2a\u6728\u5757\u3002\u6240\u6709\u6cb9\u6f06\u521a\u597d\u8db3\u591f\u6d82\u6ee1\u6240\u6709\u6728\u5757\uff0c\u5373 c1+c2+&#8230;+ck=n\u3002\u76f8\u90bb\u4e24\u4e2a\u6728\u5757\u6d82\u76f8\u540c\u8272\u663e\u5f97\u5f88\u96be\u770b\uff0c\u6240\u4ee5\u4f60\u5e0c\u671b\u7edf\u8ba1\u4efb\u610f\u4e24\u4e2a\u76f8\u90bb\u6728\u5757\u989c\u8272\u4e0d\u540c\u7684\u7740\u8272\u65b9\u6848\u3002  <\/p>\n<p><strong>Input <\/strong><\/p>\n<p> \u7b2c\u4e00\u884c\u4e3a\u4e00\u4e2a\u6b63\u6574\u6570k\uff0c\u7b2c\u4e8c\u884c\u5305\u542bk\u4e2a\u6574\u6570c1, c2, &#8230; , ck\u3002 <\/p>\n<p><strong>Output <\/strong><\/p>\n<p> \u8f93\u51fa\u4e00\u4e2a\u6574\u6570\uff0c\u5373\u65b9\u6848\u603b\u6570\u6a211,000,000,007\u7684\u7ed3\u679c\u3002 <\/p>\n<p><strong>Sample Input <\/strong><\/p>\n<p>3<br \/>1 2 3<\/p>\n<p><strong>Sample Output <\/strong><\/p>\n<p>10<\/p>\n<p><strong>Hint <\/strong><\/p>\n<p> \u3010\u6837\u4f8b2\u3011  <br \/>Input  <br \/>5  <br \/>2 2 2 2 2  <br \/>Output  <br \/>39480  <br \/>\u3010\u6837\u4f8b3\u3011  <br \/>Input  <br \/>10  <br \/>1 1 2 2 3 3 4 4 5 5  <br \/>Output  <br \/>85937576  <br \/>\u6570\u636e\u89c4\u6a21\u3011  <br \/>50%\u7684\u6570\u636e\u6ee1\u8db3\uff1a1 &lt;= k &lt;= 5, 1 &lt;= ci &lt;= 3  <br \/>100%\u7684\u6570\u636e\u6ee1\u8db3\uff1a1 &lt;= k &lt;= 15, 1 &lt;= ci &lt;= 5 <\/p>\n<p><strong>Source<br \/><\/strong>\u8fd9\u9898\u4e00\u770b\u5c31\u77e5\u9053\u662f\u8981Dp\u7684\uff0c\u800c\u4e14\u72b6\u6001\u5f88\u9ebb\u70e6\uff0c\u597d\u5728c\u6700\u5927\u53ea\u67095\uff0c\u6240\u4ee5\u53ef\u4ee5\u7528\u4e00\u4e2a6\u7ef4\u6570\u7ec4\u8868\u793a<br \/>\uff0c\u5c31\u662f\u7b2ci\u4e2a\u8868\u793a\u5f53\u524d\u8fd8\u6709i\u4e2a\u7684\u989c\u8272\u8fd8\u6709\u51e0\u4e2a\uff0c\u8fd8\u8981\u4e00\u4e2aLast\u8868\u793a\u6700\u540e\u4e00\u4e2a\u662f\u54ea\u4e2a\u989c\u8272\u3002\u7136\u540e\u7528<br \/>Hash\u8868\u5b58\u50a8\u72b6\u6001\u5c31\u53ef\u4ee5\u4e86\u3002\u3002unsigned long long\u4e2d\u7684-1\u5c31\u662f\u6700\u5927\u503c\u3002\u3002<br \/>Code\uff1a<br \/>#include&lt;cstdio&gt;<br \/>#include&lt;iostream&gt;<br \/>#include&lt;algorithm&gt;<br \/>#include&lt;string&gt;<br \/>#include&lt;vector&gt;<br \/>#include&lt;cstring&gt;<br \/>#define rep(i,n) for(int i=0;i&lt;n;i++)<br \/>#define pb push_back<br \/>using namespace std;<br \/>const int inf=~0U&gt;&gt;1,c=6,seed=17,mod=1000000007,size=17771;<br \/>typedef unsigned long long ull;<br \/>int n;<br \/>struct State<br \/>{<br \/>    int Num,Last;<br \/>    State(){memset(Num,0,sizeof(Num));}<br \/>    ull HashCode() const<br \/>    {<br \/>        ull ret=0;<br \/>        rep(i,c) ret*=seed,ret+=Num[i];<br \/>        ret*=seed;return ret+=Last;<br \/>    }<br \/>    State Next()<br \/>    {<br \/>        State s=*this;<br \/>        s.Num[Last]&#8211;;s.Num[Last-1]++;return s;<br \/>    }<br \/>    bool Legal(){return Num[Last]&gt;0&amp;&amp;Last&gt;0;}<br \/>    void operator=(const State&amp;o)<br \/>    {<br \/>        memcpy(Num,o.Num,sizeof(Num));<br \/>        Last=o.Last;<br \/>    }<br \/>};<br \/>struct Hash<br \/>{<br \/>    struct Node<br \/>    {<br \/>        ull key,Count;<br \/>        Node*next;<br \/>        Node(ull _key,Node*_next):key(_key),next(_next),Count(-1){}<br \/>    }*H[size];<br \/>    Hash(){memset(H,0,sizeof(H));}<br \/>    ull&amp; Find(const State&amp;a)<br \/>    {<br \/>        ull code=a.HashCode(),h=code%size;<br \/>        for(Node*i=H[h];i;i=i-&gt;next)if(i-&gt;key==code) return i-&gt;Count;<br \/>        return H[h]=new Node(code,H[h]),H[h]-&gt;Count;<br \/>    }<br \/>}H;<br \/>ull dfs(State S,int Left)<br \/>{<br \/>    ull&amp;x=H.Find(S);if(x!=-1) return x;<br \/>    if(!S.Legal()) return x=0;<br \/>    if(Left==1) return x=1;<br \/>    x=0;<br \/>    State NewS=S.Next();<br \/>    for(int i=1;i&lt;c;i++)<br \/>    {<br \/>        NewS.Last=i;<br \/>        if(i!=S.Last&amp;&amp;S.Num[i])<br \/>        {<br \/>            x+=S.Num[i]*dfs(NewS,Left-1);<br \/>            x%=mod;<br \/>        }<br \/>        if(i==S.Last&amp;&amp;S.Num[i]&gt;1)<br \/>        {<br \/>            x+=(S.Num[i]-1)*dfs(NewS,Left-1);<br \/>            x%=mod;<br \/>        }<br \/>    }<br \/>    return x;<br \/>}<br \/>int main()<br \/>{<br \/>    \/\/freopen(&quot;in&quot;,&quot;r&quot;,stdin);<br \/>    State now;ull ans=0;<br \/>    int n,x,s=0;cin&gt;&gt;n;rep(i,n) cin&gt;&gt;x,now.Num[x]++,s+=x;<br \/>    rep(i,c) now.Last=i,ans+=now.Num[i]*dfs(now,s),ans%=mod;<br \/>    cout&lt;&lt;ans&lt;&lt;endl;<br \/>}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[SCOI2008]\u7740\u8272\u65b9\u6848 Time Limit:10000MS&#160; Memory Limit:165536KTotal Submit:20 Accepted:16 Case Time Limit:1000MS Description \u6709n\u4e2a\u6728\u5757\u6392\u6210\u4e00\u884c\uff0c\u4ece\u5de6\u5230\u53f3\u4f9d\u6b21\u7f16\u53f7\u4e3a1~n\u3002\u4f60\u6709k\u79cd\u989c\u8272\u7684\u6cb9\u6f06\uff0c\u5176\u4e2d\u7b2ci\u79cd\u989c\u8272\u7684\u6cb9\u6f06\u8db3\u591f\u6d82ci\u4e2a\u6728\u5757\u3002\u6240\u6709\u6cb9\u6f06\u521a\u597d\u8db3\u591f\u6d82\u6ee1\u6240\u6709\u6728\u5757\uff0c\u5373 c1+c2+&#8230;+ck=n\u3002\u76f8\u90bb\u4e24\u4e2a\u6728\u5757\u6d82\u76f8\u540c\u8272\u663e\u5f97\u5f88\u96be\u770b\uff0c\u6240\u4ee5\u4f60\u5e0c\u671b\u7edf\u8ba1\u4efb\u610f\u4e24\u4e2a\u76f8\u90bb\u6728\u5757\u989c\u8272\u4e0d\u540c\u7684\u7740\u8272\u65b9\u6848\u3002 Input \u7b2c\u4e00\u884c\u4e3a\u4e00\u4e2a\u6b63\u6574\u6570k\uff0c\u7b2c\u4e8c\u884c\u5305\u542bk\u4e2a\u6574\u6570c1, c2, &#8230; , ck\u3002 Output \u8f93\u51fa\u4e00\u4e2a\u6574\u6570\uff0c\u5373\u65b9\u6848\u603b\u6570\u6a211,000,000,007\u7684\u7ed3\u679c\u3002 Sample Input 31 2 3 Sample Output 10 Hint \u3010\u6837\u4f8b2\u3011 Input 5 2 2 2 2 2 Output 39480 \u3010\u6837\u4f8b3\u3011 Input 10 1 1 2 2 3 3 4 4 5 5 Output 85937576 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[10],"tags":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/205"}],"collection":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=205"}],"version-history":[{"count":0,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=\/wp\/v2\/posts\/205\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=205"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=205"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shuizilong.com\/wjmzbmr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}