??xml version="1.0" encoding="utf-8" standalone="yes"?>久久夜色精品国产,精品久久久久久亚洲,国产精品亚洲美女久久久http://www.shnenglu.com/vontroy/archive/2010/10/02/128311.htmlVontroyVontroySat, 02 Oct 2010 07:18:00 GMThttp://www.shnenglu.com/vontroy/archive/2010/10/02/128311.htmlhttp://www.shnenglu.com/vontroy/comments/128311.htmlhttp://www.shnenglu.com/vontroy/archive/2010/10/02/128311.html#Feedback0http://www.shnenglu.com/vontroy/comments/commentRss/128311.htmlhttp://www.shnenglu.com/vontroy/services/trackbacks/128311.html#include <iostream>  
#include 
<cstdio>  
#include 
<string> 
 
using namespace std;
  
const int maxn = 301;  

string str1, str2;  

int main()  
{  
    
while( cin >> str1 >> str2 )  
    
{  
        
int dp[maxn][maxn] = {0};  
        
int len1 = str1.length();  
        
int len2 = str2.length();  
        
forint i = 1; i <= len1; i++ )  
            
forint j = 1; j <= len2; j++ )  
            
{  
                
if( str1[i - 1== str2[j - 1] )  
                    dp[i][j] 
= dp[i - 1][j - 1+ 1;  
                
else  
                    dp[i][j] 
= max( dp[i][j - 1], dp[i - 1][j] );  
            }
  
        printf(
"%d\n", dp[len1][len2]);  
    }
  
    
return 0;  
}
  

Vontroy 2010-10-02 15:18 发表评论
]]>
背包问题?ji)?/title><link>http://www.shnenglu.com/vontroy/archive/2010/05/23/116195.html</link><dc:creator>Vontroy</dc:creator><author>Vontroy</author><pubDate>Sun, 23 May 2010 14:41:00 GMT</pubDate><guid>http://www.shnenglu.com/vontroy/archive/2010/05/23/116195.html</guid><wfw:comment>http://www.shnenglu.com/vontroy/comments/116195.html</wfw:comment><comments>http://www.shnenglu.com/vontroy/archive/2010/05/23/116195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/vontroy/comments/commentRss/116195.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/vontroy/services/trackbacks/116195.html</trackback:ping><description><![CDATA[<div>背包问题?ji)?v1.0</div> <div>目录</div> <div>W一?01背包问题</div> <div>W二?完全背包问题</div> <div>W三?多重背包问题</div> <div>W四?混合三种背包问题</div> <div>W五?二维费用的背包问?/div> <div>W六?分组的背包问?/div> <div>W七?有依赖的背包问题</div> <div>W八?泛化物品</div> <div>W九(ji)?背包问题问法的变?/div> <div>附:(x)USACO中的背包问题</div> <div>目录</div> <div>W一?01背包问题</div> <div>q是最基本的背包问题,每个物品最多只能放一ơ?/div> <div>W二?完全背包问题</div> <div>W二个基本的背包问题模型Q每U物品可以放无限多次?/div> <div>W三?多重背包问题</div> <div>每种物品有一个固定的ơ数上限?/div> <div>W四?混合三种背包问题</div> <div>前面三U简单的问题叠加成较复杂的问题?/div> <div>W五?二维费用的背包问?/div> <div>一个简单的常见扩展?/div> <div>W六?分组的背包问?/div> <div>一U题目类型,也是一个有用的模型。后两节的基?/div> <div>W七?有依赖的背包问题</div> <div>另一U给物品的选取加上限制的方法?/div> <div>W八?泛化物品</div> <div>我自己关于背包问题的思考成果,有一Ҏ(gu)象?/div> <div>W九(ji)?背包问题问法的变?/div> <div>试图触类旁通、D一反三?/div> <div>附:(x)USACO中的背包问题</div> <div>P01: 01背包问题</div> <div>题目</div> <div>有N件物品和一个容量ؓ(f)V的背包。第i件物品的费用是c[i]Qh(hun)值是w[i]。求解将哪些物品装入背包可价值d最大?/div> <div>基本思\</div> <div>q是最基础的背包问题,特点是:(x)每种物品仅有一Ӟ可以选择放或不放?/div> <div>用子问题定义状态:(x)即f[i][v]表示前i件物品恰攑օ一个容量ؓ(f)v的背包可以获得的最大h(hun)倹{则其状态{ULE便是:(x)</div> <div>f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}</div> <div>q个方程非常重要Q基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以有必要它详细解释一下:(x)“前i件物品放入容量ؓ(f)v的背包中”q个子问题,若只考虑Wi件物品的{略Q放或不放)(j)Q那么就可以转化Z个只牉|前i-1件物品的问题。如果不攄i件物品,那么问题p{化ؓ(f)“前i-1件物品放入容量ؓ(f)v的背包中”Qh(hun)gؓ(f)f[i-1][v]Q如果放Wi件物品,那么问题p{化ؓ(f)“前i-1件物品放入剩下的定w为v-c[i]的背包中”Q此时能获得的最大h(hun)值就是f[i-1][v-c[i]]再加上通过攑օWi件物品获得的价值w[i]?/div> <div>优化I间复杂?/div> <div>以上Ҏ(gu)的时间和I间复杂度均为O(N*V)Q其中时间复杂度基本已经不能再优化了(jin)Q但I间复杂度却可以优化到O(V)?/div> <div>先考虑上面讲的基本思\如何实现Q肯定是有一个主循环i=1..NQ每ơ算出来二维数组f[i][0..V]的所有倹{那么,如果只用一个数lf[0..V]Q能不能保证Wiơ@环结束后f[v]中表C的是我们定义的状态f[i][v]呢?f[i][v]是由f[i-1][v]和f[i-1][v-c[i]]两个子问题递推而来Q能否保证在推f[i][v]Ӟ也即在第iơ主循环中推f[v]Ӟ(j)能够得到f[i-1][v]和f[i-1][v-c[i]]的值呢Q事实上Q这要求在每ơ主循环中我们以v=V..0的顺序推f[v]Q这h能保证推f[v]时f[v-c[i]]保存的是状态f[i-1][v-c[i]]的倹{伪代码如下Q?/div> <div>for i=1..N</div> <div>    for v=V..0</div> <div>        f[v]=max{f[v],f[v-c[i]]+w[i]};</div> <div>其中的f[v]=max{f[v],f[v-c[i]]}一句恰q当于我们的{ULEf[i][v]=max{f[i-1][v],f[i-1][v-c[i]]}Q因为现在的f[v-c[i]]q当于原来的f[i-1][v-c[i]]。如果将v的@环顺序从上面的逆序Ҏ(gu)序的话Q那么则成了(jin)f[i][v]由f[i][v-c[i]]推知Q与本题意不W,但它却是另一个重要的背包问题P02最L(fng)解决Ҏ(gu)Q故学习(fn)只用一l数l解01背包问题是十分必要的?/div> <div>事实上,使用一l数l解01背包的程序在后面?x)被多次用到Q所以这里抽象出一个处理一?1背包中的物品q程Q以后的代码中直接调用不加说明?/div> <div>q程ZeroOnePackQ表C处理一?1背包中的物品Q两个参数cost、weight分别表明qg物品的费用和价倹{?/div> <div>procedure ZeroOnePack(cost,weight)</div> <div>    for v=V..cost</div> <div>        f[v]=max{f[v],f[v-cost]+weight}</div> <div>注意q个q程里的处理与前面给出的伪代码有所不同。前面的CZE序写成v=V..0是ؓ(f)?jin)在E序中体现每个状态都按照方程求解?jin),避免不必要的思维复杂度。而这里既然已l抽象成看作黑箱的过E了(jin)Q就可以加入优化。费用ؓ(f)cost的物品不?x)?jing)响状态f[0..cost-1]Q这是显然的?/div> <div>有了(jin)q个q程以后Q?1背包问题的伪代码可以这样写Q?/div> <div>for i=1..N</div> <div>    ZeroOnePack(c[i],w[i]);</div> <div>初始化的l节问题</div> <div>我们看到的求最优解的背包问题题目中Q事实上有两U不太相同的问法。有的题目要?#8220;恰好装满背包”时的最优解Q有的题目则q没有要求必L背包装满。一U区别这两种问法的实现方法是在初始化的时候有所不同?/div> <div>如果是第一U问法,要求恰好装满背包Q那么在初始化时除了(jin)f[0]?其它f[1..V]均设?∞Q这样就可以保证最l得到的f[N]是一U恰好装满背包的最优解?/div> <div>如果q没有要求必L背包装满Q而是只希望h(hun)格尽量大Q初始化时应该将f[0..V]全部设ؓ(f)0?/div> <div>Z么呢Q可以这L(fng)解:(x)初始化的f数组事实上就是在没有M物品可以攑օ背包时的合法状态。如果要求背包恰好装满,那么此时只有定w?的背包可能被价gؓ(f)0的nothing“恰好装满”Q其它容量的背包均没有合法的解,属于未定义的状态,它们的值就都应该是-∞?jin)。如果背包ƈ非必被装满Q那么Q何容量的背包都有一个合法解“什么都不装”Q这个解的h(hun)gؓ(f)0Q所以初始时状态的g全部ؓ(f)0?jin)?/div> <div>q个技巧完全可以推q到其它cd的背包问题,后面也就不再对进行状态{UM前的初始化进行讲解?/div> <div>结</div> <div>01背包问题是最基本的背包问题,它包含了(jin)背包问题中设计状态、方E的最基本思想Q另外,别的cd的背包问题往往也可以{换成01背包问题求解。故一定要仔细体会(x)上面基本思\的得出方法,状态{ULE的意义Q以?qing)最后怎样优化的空间复杂度?/div> <div>首页</div> <div><br></div> <div>P02: 完全背包问题</div> <div>题目</div> <div>有NU物品和一个容量ؓ(f)V的背包,每种物品都有无限件可用。第iU物品的费用是c[i]Qh(hun)值是w[i]。求解将哪些物品装入背包可ɘq些物品的费用d不超q背包容量,且h(hun)值d最大?/div> <div>基本思\</div> <div>q个问题非常cM?1背包问题Q所不同的是每种物品有无限g。也是从每U物品的角度考虑Q与它相关的{略已ƈ非取或不取两U,而是有取0件、取1件、取2?#8230;…{很多种。如果仍然按照解01背包时的思\Qo(h)f[i][v]表示前iU物品恰攑օ一个容量ؓ(f)v的背包的最大权倹{仍然可以按照每U物品不同的{略写出状态{ULE,像这P(x)</div> <div>f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0<=k*c[i]<=v}</div> <div>q跟01背包问题一hO(N*V)个状态需要求解,但求解每个状态的旉已经不是常数?jin),求解状态f[i][v]的时间是O(v/c[i])Qȝ复杂度是过O(VN)的?/div> <div>?1背包问题的基本思\加以改进Q得C(jin)q样一个清晰的Ҏ(gu)。这说明01背包问题的方E的是很重要,可以推及(qing)其它cd的背包问题。但我们q是试图改进q个复杂度?/div> <div>一个简单有效的优化</div> <div>完全背包问题有一个很单有效的优化Q是q样的:(x)若两件物品i、j满c[i]<=c[j]且w[i]>=w[j]Q则物品jLQ不用考虑。这个优化的正确性显?dng)?x)M情况下都可将价值小费用高得j换成物美价廉的iQ得到至不?x)更差的?gu)。对于随机生成的数据Q这个方法往往?x)大大减物品的件数Q从而加快速度。然而这个ƈ不能改善最坏情늚复杂度,因ؓ(f)有可能特别设计的数据可以一件物品也M掉?/div> <div>q个优化可以单的O(N^2)地实玎ͼ一般都可以承受。另外,针对背包问题而言Q比较不错的一U方法是Q首先将费用大于V的物品去掉,然后使用cM计数排序的做法,计算用相同的物品中h(hun)值最高的是哪个,可以O(V+N)地完成这个优化。这个不太重要的q程׃l出伪代码了(jin)Q希望你能独立思考写Z代码或程序?/div> <div>转化?1背包问题求解</div> <div>既然01背包问题是最基本的背包问题,那么我们可以考虑把完全背包问题{化ؓ(f)01背包问题来解。最单的x是,考虑到第iU物品最多选V/c[i]Ӟ于是可以把第iU物品{化ؓ(f)V/c[i]件费用及(qing)价值均不变的物品,然后求解q个01背包问题。这样完全没有改q基本思\的时间复杂度Q但q毕竟给?jin)我们将完全背包问题转化?1背包问题的思\Q将一U物品拆成多件物品?/div> <div>更高效的转化Ҏ(gu)是:(x)把第iU物品拆成费用ؓ(f)c[i]*2^k、h(hun)gؓ(f)w[i]*2^k的若qg物品Q其中k满c[i]*2^k<=V。这是二q制的思想Q因Z最优策略选几件第iU物品,d以表C成若干?^k件物品的和。这h每种物品拆成O(log(V/c[i]))件物品,是一个很大的改进?/div> <div>但我们有更优的O(VN)的算法?/div> <div>O(VN)的算?/div> <div>q个法使用一l数l,先看伪代码:(x)</div> <div>for i=1..N</div> <div>    for v=0..V</div> <div>        f[v]=max{f[v],f[v-cost]+weight}</div> <div>你会(x)发现Q这个伪代码与P01的伪代码只有v的@环次序不同而已。ؓ(f)什么这样一改就可行呢?首先xZ么P01中要按照v=V..0的逆序来@环。这是因保证Wiơ@环中的状态f[i][v]是由状态f[i-1][v-c[i]]递推而来。换句话_(d)q正是ؓ(f)?jin)保证每件物品只选一ơ,保证在考虑“选入Wi件物?#8221;qg{略Ӟ依据的是一个绝无已l选入Wi件物品的子结果f[i-1][v-c[i]]。而现在完全背包的特点恰是每种物品可选无限gQ所以在考虑“加选一件第iU物?#8221;q种{略Ӟ却正需要一个可能已选入WiU物品的子结果f[i][v-c[i]]Q所以就可以q且必须采用v=0..V的顺序@环。这是q个单的E序Z成立的道理?/div> <div>q个法也可以以另外的思\得出。例如,基本思\中的状态{ULE可以等价地变Ş成这UŞ式:(x)</div> <div>f[i][v]=max{f[i-1][v],f[i][v-c[i]]+w[i]}</div> <div>这个方E用一l数l实玎ͼ便得C(jin)上面的伪代码?/div> <div>最后抽象出处理一件完全背包类物品的过E伪代码Q以后会(x)用到Q?/div> <div>procedure CompletePack(cost,weight)</div> <div>    for v=cost..V</div> <div>        f[v]=max{f[v],f[v-c[i]]+w[i]}</div> <div>ȝ</div> <div>完全背包问题也是一个相当基的背包问题,它有两个状态{ULE,分别?#8220;基本思\”以及(qing)“O(VN)的算?#8220;的小节中l出。希望你能够对这两个状态{ULE都仔细C?x),不仅CQ也要弄明白它们是怎么得出来的Q最好能够自己想一U得到这些方E的Ҏ(gu)。事实上Q对每一道动态规划题目都思考其方程的意义以?qing)如何得来,是加深对动态规划的理解、提高动态规划功力的好方法?/div> <div>首页</div> <div><br></div> <div>P03: 多重背包问题</div> <div>题目</div> <div>有NU物品和一个容量ؓ(f)V的背包。第iU物品最多有n[i]件可用,每g费用是c[i]Qh(hun)值是w[i]。求解将哪些物品装入背包可ɘq些物品的费用d不超q背包容量,且h(hun)值d最大?/div> <div>基本法</div> <div>q题目和完全背包问题很类伹{基本的方程只需完全背包问题的方程略微一改即可,因ؓ(f)对于WiU物品有n[i]+1U策略:(x)?Ӟ??#8230;…取n[i]件。o(h)f[i][v]表示前iU物品恰攑օ一个容量ؓ(f)v的背包的最大权|则有状态{ULE:(x)</div> <div>f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0<=k<=n[i]}</div> <div>复杂度是O(V*Σn[i])?/div> <div>转化?1背包问题</div> <div>另一U好惛_写的基本Ҏ(gu)是{化ؓ(f)01背包求解Q把WiU物品换成n[i]?1背包中的物品Q则得到?jin)物品数?#931;n[i]?1背包问题Q直接求解,复杂度仍然是O(V*Σn[i])?/div> <div>但是我们期望它转化?1背包问题之后能够像完全背包一样降低复杂度。仍然考虑二进制的思想Q我们考虑把第iU物品换成若qg物品Q得原问题中第iU物品可取的每种{略——取0..n[i]件——均能等价于取若qg代换以后的物品。另外,取超qn[i]件的{略必不能出现?/div> <div>Ҏ(gu)是:(x)第iU物品分成若qg物品Q其中每件物品有一个系敎ͼqg物品的费用和价值均是原来的费用和h(hun)g以这个系数。ɘq些pL分别?,2,4,...,2^(k-1),n[i]-2^k+1Q且k是满n[i]-2^k+1>0的最大整数。例如,如果n[i]?3Q就这U物品分成系数分别ؓ(f)1,2,4,6的四件物品?/div> <div>分成的这几g物品的系数和为n[i]Q表明不可能取多于n[i]件的WiU物品。另外这U方法也能保证对?..n[i]间的每一个整敎ͼ均可以用若干个系数的和表C,q个证明可以?..2^k-1?^k..n[i]两段来分别讨论得出,q不难,希望你自己思考尝试一下?/div> <div>q样将WiU物品分成了(jin)O(log n[i])U物品,原问题转化Z(jin)复杂度ؓ(f)O(V*Σlog n[i])?1背包问题Q是很大的改q?/div> <div>下面l出O(log amount)旉处理一件多重背包中物品的过E,其中amount表示物品的数量:(x)</div> <div>procedure MultiplePack(cost,weight,amount)</div> <div>    if cost*amount>=V</div> <div>        CompletePack(cost,weight)</div> <div>        return</div> <div>    integer k=1</div> <div>    while k<num</div> <div>        ZeroOnePack(k*cost,k*weight)</div> <div>        amount=amount-k</div> <div>        k=k*2</div> <div>    ZeroOnePack(amount*cost,amount*weight)</div> <div>希望你仔l体?x)这个伪代码Q如果不太理解的话,不妨译成程序代码以后,单步执行几次Q或者头脑加U笔模拟一下,也许׃(x)慢慢理解?jin)?/div> <div>O(VN)的算?/div> <div>多重背包问题同样有O(VN)的算法。这个算法基于基本算法的状态{ULE,但应用单调队列的Ҏ(gu)使每个状态的值可以以均摊O(1)的时间求解。由于用单调队列优化的DP已超Z(jin)NOIP的范_(d)故本文不再展开讲解。我最初了(jin)解到q个Ҏ(gu)是在楼天成的“男h八题”qȝ片上?/div> <div>结</div> <div>q里我们看到?jin)将一个算法的复杂度由O(jin)(V*Σn[i])改进到O(V*Σlog n[i])的过E,q知道了(jin)存在应用出NOIP范围的知识的O(VN)法。希望你特别注意“拆分物品”的思想和方法,自己证明一下它的正性,q将完整的程序代码写出来?/div> <div>首页</div> <div><br></div> <div>P04: 混合三种背包问题</div> <div>问题</div> <div>如果P01、P02、P03混合h。也是_(d)有的物品只可以取一ơ(01背包Q,有的物品可以取无限次Q完全背包)(j)Q有的物品可以取的次数有一个上限(多重背包Q。应该怎么求解呢?</div> <div>01背包与完全背包的混合</div> <div>考虑到在P01和P02中给出的伪代码只有一处不同,故如果只有两cȝ品:(x)一cȝ品只能取一ơ,另一cȝ品可以取无限ơ,那么只需在对每个物品应用转移方程ӞҎ(gu)物品的类别选用序或逆序的@环即可,复杂度是O(VN)。伪代码如下Q?/div> <div>for i=1..N</div> <div>    if Wi件物品是01背包</div> <div>        for v=V..0</div> <div>            f[v]=max{f[v],f[v-c[i]]+w[i]};</div> <div>    else if Wi件物品是完全背包</div> <div>        for v=0..V</div> <div>            f[v]=max{f[v],f[v-c[i]]+w[i]};</div> <div>再加上多重背?/div> <div>如果再加上有的物品最多可以取有限ơ,那么原则上也可以l出O(VN)的解法:(x)遇到多重背包cd的物品用单调队列解即可。但如果不考虑过NOIP范围的算法的话,用P03中将每个q类物品分成O(log n[i])?1背包的物品的Ҏ(gu)也已l很优了(jin)?/div> <div>当然Q更清晰的写法是调用我们前面l出的三个相兌E?/div> <div>for i=1..N</div> <div>    if Wi件物品是01背包</div> <div>        ZeroOnePack(c[i],w[i])</div> <div>    else if Wi件物品是完全背包</div> <div>        CompletePack(c[i],w[i])</div> <div>    else if Wi件物品是多重背包</div> <div>        MultiplePack(c[i],w[i],n[i])</div> <div>在最初写三个q程的时候,可能完全没有惛_它们?x)在q里混合应用。我惌体现?jin)编E中抽象的威力。如果你一直就是以q种“抽象E?#8221;的方式写每一c背包问题的Q也非常清楚它们的实Cl微的不同,那么在遇到؜合三U背包问题的题目Ӟ一定能很快惛_上面z的解法Q对吗?</div> <div>结</div> <div>有h_(d)困难的题目都是由单的题目叠加而来的。这句话是否公理暂且存之不论Q但它在本讲中已l得C(jin)充分的体现。本?1背包、完全背包、多重背包都不是什么难题,但将它们单地l合h以后得C(jin)q样一道一定能吓倒不h的题目。但只要基础扎实Q领?x)三U基本背包问题的思想Q就可以做到把困隄题目拆分成简单的题目来解冟?/div> <div>首页</div> <div><br></div> <div>P05: 二维费用的背包问?/div> <div>问题</div> <div>二维费用的背包问题是指:(x)对于每g物品Q具有两U不同的费用Q选择qg物品必须同时付出q两U代P对于每种代h(hun)都有一个可付出的最大|背包定wQ。问怎样选择物品可以得到最大的价倹{设q两U代价分别ؓ(f)代h(hun)1和代?Q第i件物品所需的两U代价分别ؓ(f)a[i]和b[i]。两U代价可付出的最大|两种背包定wQ分别ؓ(f)V和U。物品的价gؓ(f)w[i]?/div> <div>法</div> <div>费用加了(jin)一l_(d)只需状态也加一l即可。设f[i][v][u]表示前i件物品付ZU代价分别ؓ(f)v和u时可获得的最大h(hun)倹{状态{ULE就是:(x)</div> <div>f[i][v][u]=max{f[i-1][v][u],f[i-1][v-a[i]][u-b[i]]+w[i]}</div> <div>如前q方法,可以只用二l的数组Q当每g物品只可以取一ơ时变量v和u采用逆序的@环,当物品有如完全背包问题时采用序的@环。当物品有如多重背包问题时拆分物品。这里就不再l出伪代码了(jin)Q相信有?jin)前面的基础Q你能够自己实现个问题的E序?/div> <div>物品M数的限制</div> <div>有时Q?#8220;二维费用”的条件是以这样一U隐含的方式l出的:(x)最多只能取M件物品。这事实上相当于每g物品多了(jin)一U?#8220;件数”的费用,每个物品的g数费用均?Q可以付出的最大g数费用ؓ(f)M。换句话_(d)设f[v][M] 表示付出费用v、最多选m件时可得到的最大h(hun)|则根据物品的cdQ?1、完全、多重)(j)用不同的Ҏ(gu)循环更新Q最后在f[0..V][0..M]范围内寻扄案。[/M]</div> <div>结</div> <div>当发现由熟?zhn)的动态规划题目变形得来的题目Ӟ在原来的状态中加一U以满新的限制是一U比较通用的方法。希望你能从本讲中初步体?x)到q种Ҏ(gu)?/div> <div> <div><br></div> <div>P06: 分组的背包问?/div> <div>问题</div> <div>有N件物品和一个容量ؓ(f)V的背包。第i件物品的费用是c[i]Qh(hun)值是w[i]。这些物品被划分q组Q每l中的物品互相冲H,最多选一件。求解将哪些物品装入背包可ɘq些物品的费用d不超q背包容量,且h(hun)值d最大?/div> <div>法</div> <div>q个问题变成?jin)每l物品有若干U策略:(x)是选择本组的某一Ӟq是一仉不选。也是说设f[k][v]表示前kl物品花费费用v能取得的最大权|则有Q?/div> <div>f[k][v]=max{f[k-1][v],f[k-1][v-c[i]]+w[i]|物品i属于Wkl}</div> <div>使用一l数l的伪代码如下:(x)</div> <div>for 所有的lk</div> <div>    for v=V..0</div> <div>        for 所有的i属于lk</div> <div>            f[v]=max{f[v],f[v-c[i]]+w[i]}</div> <div>注意q里的三层@环的序Q甚臛_本文的beta版中我自己都写错?jin)?#8220;for v=V..0”q一层@环必d“for 所有的i属于lk”之外。这h能保证每一l内的物品最多只有一个会(x)被添加到背包中?/div> <div>另外Q显然可以对每组内的物品应用P02?#8220;一个简单有效的优化”?/div> <div>结</div> <div>分组的背包问题将彼此互斥的若q物品称Z个组Q这建立?jin)一个很好的模型。不背包问题的变Ş都可以{化ؓ(f)分组的背包问题(例如P07Q,由分l的背包问题q一步可定义“泛化物品”的概念,十分有利于解题?/div> <div>首页</div> <div><br></div> <div>P07: 有依赖的背包问题</div> <div>化的问题</div> <div>q种背包问题的物品间存在某种“依赖”的关pR也是_(d)i依赖于jQ表C选物品iQ则必须选物品j。ؓ(f)?jin)简化v见,我们先设没有某个物品既依赖于别的物品Q又被别的物品所依赖Q另外,没有某g物品同时依赖多g物品?/div> <div>法</div> <div>q个问题由NOIP2006金明的预方案一题扩展而来。遵从该题的提法Q将不依赖于别的物品的物品称?#8220;Mg”Q依赖于某主件的物品UCؓ(f)“附g”。由q个问题的简化条件可知所有的物品pq主件和依赖于每个主件的一个附仉合组成?/div> <div>按照背包问题的一般思\Q仅考虑一个主件和它的附g集合。可是,可用的策略非常多Q包括:(x)一个也不选,仅选择MgQ选择Mg后再选择一个附Ӟ选择Mg后再选择两个附g……无法用状态{ULE来表示如此多的{略。(事实上,设有n个附Ӟ则策略有2^n+1个,为指数。)(j)</div> <div>考虑到所有这些策略都是互斥的Q也是_(d)你只能选择一U策略)(j)Q所以一个主件和它的附g集合实际上对应于P06中的一个物品组Q每个选择?jin)主件又选择?jin)若q个附g的策略对应于q个物品l中的一个物品,其费用和价值都是这个策略中的物品的值的和。但仅仅是这一步{化ƈ不能l出一个好的算法,因ؓ(f)物品l中的物品还是像原问题的{略一样多?/div> <div>再考虑P06中的一句话Q?可以Ҏ(gu)l中的物品应用P02?#8220;一个简单有效的优化”?q提C我们,对于一个物品组中的物品Q所有费用相同的物品只留一个h(hun)值最大的Q不影响l果。所以,我们可以对主件i?#8220;附g集合”先进行一?1背包Q得到费用依ơؓ(f)0..V-c[i]所有这些值时相应的最大h(hun)值f'[0..V-c[i]]。那么这个主件及(qing)它的附g集合相当于V-c[i]+1个物品的物品l,其中费用为c[i]+k的物品的价gؓ(f)f'[k]+w[i]。也是说原来指数的策略中有很多策略都是冗余的Q通过一?1背包后,主件i转化为V-c[i]+1个物品的物品l,可以直接应用P06的算法解决问题了(jin)?/div> <div>较一般的问题</div> <div>更一般的问题是:(x)依赖关系以图Z“林”的Ş式给出(林卛_叉树(wi)的集合)(j)Q也是_(d)Mg的附件仍然可以具有自q附g集合Q限制只是每个物品最多只依赖于一个物品(只有一个主Ӟ(j)且不出现循环依赖?/div> <div>解决q个问题仍然可以用将每个Mg?qing)其附g集合转化为物品组的方式。唯一不同的是Q由于附件可能还有附Ӟ׃能将每个附g都看作一个一般的01背包中的物品?jin)。若q个附g也有附g集合Q则它必定要被先转化为物品组Q然后用分组的背包问题解Z件及(qing)光仉合所对应的附件组中各个费用的附g所对应的h(hun)倹{?/div> <div>事实上,q是一U树(wi)形DPQ其特点是每个父节点都需要对它的各个儿子的属性进行一ơDP以求得自q相关属性。这已经触及(qing)C(jin)“泛化物品”的思想。看完P08后,你会(x)发现q个“依赖关系?#8221;每一个子?wi)都{h(hun)于一件泛化物品,求某节点为根的子?wi)对应的泛化物品相当于求其所有儿子的对应的泛化物品之和?/div> <div>结</div> <div>NOIP2006的那道背包问题我做得很失败,写了(jin)上百行的代码Q却一分未得。后来我通过思考发现通过引入“物品l?#8221;?#8220;依赖”的概念可以加深对q题的理解,q可以解军_的推qK题。用物品l的思想考虑那题中极其特D的依赖关系Q物品不能既作主件又作附Ӟ每个Mg最多有两个附gQ可以发C个主件和它的两个附g{h(hun)于一个由四个物品l成的物品组Q这便揭CZ(jin)问题的某U本质?/div> <div>我想_(d)(x)p|不是什么丢人的事情Q从p|中全无收h是?/div> <div>首页</div> <div><br></div> <div>P08: 泛化物品</div> <div>定义</div> <div>考虑q样一U物品,它ƈ没有固定的费用和价|而是它的价值随着你分配给它的费用而变化。这是泛化物品的概c(din)?/div> <div>更严格的定义之。在背包定w为V的背包问题中Q泛化物品是一个定义域?..V中的整数的函数hQ当分配l它的费用ؓ(f)vӞ能得到的价值就是h(v)?/div> <div>q个定义有一点点抽象Q另一U理解是一个泛化物品就是一个数lh[0..V]Q给它费用vQ可得到价值h[V]?/div> <div>一个费用ؓ(f)c价gؓ(f)w的物品,如果它是01背包中的物品Q那么把它看成泛化物品,它就是除?jin)h(c)=w其它函数值都?的一个函数。如果它是完全背包中的物品,那么它可以看成这样一个函敎ͼ仅当v被c整除时有h(v)=v/c*wQ其它函数值均?。如果它是多重背包中重复ơ数最多ؓ(f)n的物品,那么它对应的泛化物品的函数有h(v)=v/c*w仅当v被c整除且v/c<=nQ其它情况函数值均??/div> <div>一个物品组可以看作一个泛化物品h。对于一?..V中的vQ若物品l中不存在费用ؓ(f)v的的物品Q则h(v)=0Q否则h(v)为所有费用ؓ(f)v的物品的最大h(hun)倹{P07中每个主件及(qing)光仉合等价于一个物品组Q自然也可看作一个泛化物品?/div> <div>泛化物品的和</div> <div>如果面对两个泛化物品h和lQ要用给定的费用从这两个泛化物品中得到最大的价|怎么求呢Q事实上Q对于一个给定的费用vQ只需枚D这个费用如何分配给两个泛化物品可以了(jin)。同L(fng)Q对?..V的每一个整数vQ可以求得费用v分配到h和l中的最大h(hun)值f(v)。也即f(v)=max{h(k)+l(v-k)|0<=k<=v}。可以看刎ͼf也是一个由泛化物品h和l军_的定义域?..V的函敎ͼ也就是说Qf是一个由泛化物品h和l军_的泛化物品?/div> <div>由此可以定义泛化物品的和Qh、l都是泛化物品Q若泛化物品f满f(v)=max{h(k)+l(v-k)|0<=k<=v}Q则Uf是h与l的和Q即f=h+l。这个运的旉复杂度取决于背包的容量,是O(V^2)?/div> <div>泛化物品的定义表明:(x)在一个背包问题中Q若两个泛化物品代以它们的和,不媄(jing)响问题的{案。事实上Q对于其中的物品都是泛化物品的背包问题,求它的答案的q程也就是求所有这些泛化物品之和的q程。设此和为sQ则{案是s[0..V]中的最大倹{?/div> <div>背包问题的泛化物?/div> <div>一个背包问题中Q可能会(x)l出很多条gQ包括每U物品的费用、h(hun)值等属性,物品之间的分l、依赖等关系{。但肯定能将问题对应于某个泛化物品。也是_(d)l定?jin)所有条件以后,可以对每个非负整数v求得Q若背包定w为vQ将物品装入背包可得到的最大h(hun)值是多少Q这可以认ؓ(f)是定义在非负整数集上的一件泛化物品。这个泛化物品——或者说问题所对应的一个定义域为非负整数的函数——包含了(jin)关于问题本n的高度浓~的信息。一般而言Q求得这个泛化物品的一个子域(例如0..VQ的g后,可以根据这个函数的取值得到背包问题的最l答案?/div> <div>lg所qͼ一般而言Q求解背包问题,x解这个问题所对应的一个函敎ͼ卌问题的泛化物品。而求解某个泛化物品的一U方法就是将它表CZؓ(f)若干泛化物品的和然后求之?/div> <div>结</div> <div>本讲可以说都是我自己的原创思想。具体来_(d)是我在学?fn)函数式~程?Scheme 语言Ӟ用函数编E的眼光审视各类背包问题得出的理论。这一讲真的很抽象Q也许在“模型的抽象程?#8221;q一斚w已经出?jin)NOIP的要求,所以暂且看不懂也没关系。相信随着你的OI之\逐渐延Q有一天你?x)理解的?/div> <div>我想_(d)(x)“思?#8221;是一个OIer最重要的品质。简单的问题Q深入思考以后,也能发现更多?/div> <div>首页</div> <div><br></div> <div>P09: 背包问题问法的变?/div> <div>以上涉及(qing)的各U背包问题都是要求在背包定wQ费用)(j)的限制下求可以取到的最大h(hun)|但背包问题还有很多种灉|的问法,在这里值得提一下。但是我认ؓ(f)Q只要深入理解了(jin)求背包问题最大h(hun)值的Ҏ(gu)Q即佉K法变化了(jin)Q也是不难想出算法的?/div> <div>例如Q求解最多可以放多少件物品或者最多可以装满多背包的I间。这都可以根据具体问题利用前面的方程求出所有状态的|f数组Q之后得到?/div> <div>q有Q如果要求的?#8220;Mh(hun)值最?#8221;“Mg数最?#8221;Q只需单的上面的状态{ULE中的maxҎ(gu)min卛_?/div> <div>下面说一些变化更大的问法?/div> <div>输出Ҏ(gu)</div> <div>一般而言Q背包问题是要求一个最优|如果要求输出q个最优值的Ҏ(gu)Q可以参照一般动态规划问题输出方案的Ҏ(gu)Q记录下每个状态的最优值是q态{ULE的哪一Ҏ(gu)出来的,换句话说Q记录下它是由哪一个策略推出来的。便可根据这条策略找C一个状态,从上一个状态接着向前推即可?/div> <div>q是?1背包ZQ方Eؓ(f)f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}。再用一个数lg[i][v]Q设g[i][v]=0表示推出f[i][v]的值时是采用了(jin)方程的前一(也即f[i][v]=f[i-1][v]Q,g[i][v]表示采用?jin)方E的后一V注意这两项分别表示?jin)两U策略:(x)未选第i个物品及(qing)选了(jin)Wi个物品。那么输出方案的伪代码可以这样写Q设最l状态ؓ(f)f[N][V]Q:(x)</div> <div>i=N</div> <div>v=V</div> <div>while(i>0)</div> <div>    if(g[i][v]==0)</div> <div>        print "未选第i物?</div> <div>    else if(g[i][v]==1)</div> <div>        print "选了(jin)Wi物?</div> <div>        v=v-c[i]</div> <div>另外Q采用方E的前一Ҏ(gu)后一也可以在输出方案的q程中根据f[i][v]的值实时地求出来,也即不须U录g数组Q将上述代码中的g[i][v]==0Ҏ(gu)f[i][v]==f[i-1][v]Qg[i][v]==1Ҏ(gu)f[i][v]==f[i-1][v-c[i]]+w[i]也可?/div> <div>输出字典序最的最优方?/div> <div>q里“字典序最?#8221;的意思是1..NL(fng)品的选择Ҏ(gu)排列出来以后字典序最。以输出01背包最字典序的方案ؓ(f)例?/div> <div>一般而言Q求一个字典序最的最优方案,只需要在转移时注意策略。首先,子问题的定义要略改一些。我们注意到Q如果存在一个选了(jin)物品1的最优方案,那么{案一定包含物?Q原问题转化Z个背包容量ؓ(f)v-c[1]Q物品ؓ(f)2..N的子问题。反之,如果{案不包含物?Q则转化成背包容量仍为VQ物品ؓ(f)2..N的子问题。不答案怎样Q子问题的物品都是以i..N而非前所q的1..i的Ş式来定义的,所以状态的定义和{ULE都需要改一下。但也许更简易的Ҏ(gu)是先把物品逆序排列一下,以下按物品已被逆序排列来叙q?/div> <div>在这U情况下Q可以按照前面经典的状态{ULE来求|只是输出Ҏ(gu)的时候要注意Q从N?输入Ӟ如果f[i][v]==f[i-v]?qing)f[i][v]==f[i-1][f-c[i]]+w[i]同时成立Q应该按照后者(即选择?jin)物品iQ来输出Ҏ(gu)?/div> <div>求方案L</div> <div>对于一个给定了(jin)背包定w、物品费用、物品间怺关系Q分l、依赖等Q的背包问题Q除?jin)再l定每个物品的h(hun)值后求可得到的最大h(hun)值外Q还可以得到装满背包或将背包装至某一指定定w的方案L?/div> <div>对于q类改变问法的问题,一般只需状态{ULE中的maxҎ(gu)sum卛_。例如若每g物品均是完全背包中的物品Q{ULE即?/div> <div>f[i][v]=sum{f[i-1][v],f[i][v-c[i]]}</div> <div>初始条gf[0][0]=1?/div> <div>事实上,q样做可行的原因在于状态{ULE已l考察?jin)所有可能的背包l成Ҏ(gu)?/div> <div>最优方案的L</div> <div>q里的最优方案是指物品Mh(hun)值最大的Ҏ(gu)。以01背包Z?/div> <div>l合求最大Mh(hun)值和Ҏ(gu)L两个问题的思\Q最优方案的L可以q样求:(x)f[i][v]意义同前qͼg[i][v]表示q个子问题的最优方案的LQ则在求f[i][v]的同时求g[i][v]的伪代码如下Q?/div> <div>for i=1..N</div> <div>   for v=0..V</div> <div>        f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}</div> <div>        g[i][v]=0</div> <div>        if(f[i][v]==f[i-1][v])</div> <div>            inc(g[i][v],g[i-1][v]</div> <div>        if(f[i][v]==f[i-1][v-c[i]]+w[i])</div> <div>            inc(g[i][v],g[i-1][v-c[i]])</div> <div>如果你是W一ơ看到这L(fng)问题Q请仔细体会(x)上面的伪代码?/div> <div>求次优解、第K优解</div> <div>对于求次优解、第K优解cȝ问题Q如果相应的最优解问题能写出状态{ULE、用动态规划解冻I那么求次优解往往可以相同的复杂度解决Q第K优解则比求最优解的复杂度上多一个系数K?/div> <div>其基本思想是将每个状态都表示成有序队列,状态{ULE中的max/min转化成有序队列的合ƈ。这里仍然以01背包Z讲解一下?/div> <div>首先?1背包求最优解的状态{ULE:(x)f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}。如果要求第K优解Q那么状态f[i][v]应该是一个大ؓ(f)K的数lf[i][v][1..K]。其中f[i][v][k]表示前i个物品、背包大ؓ(f)vӞWk优解的倹{?#8220;f[i][v]是一个大ؓ(f)K的数l?#8221;q一句,熟?zhn)C语言的同学可能比较好理解Q或者也可以单地理解为在原来的方E中加了(jin)一l。显然f[i][v][1..K]qK个数是由大到排列的Q所以我们把它认为是一个有序队列?/div> <div>然后原方E就可以解释为:(x)f[i][v]q个有序队列是由f[i-1][v]和f[i-1][v-c[i]]+w[i]q两个有序队列合q得到的。有序队列f[i-1][v]即f[i-1][v][1..K]Qf[i-1][v-c[i]]+w[i]则理解ؓ(f)在f[i-1][v-c[i]][1..K]的每个数上加上w[i]后得到的有序队列。合q这两个有序队列q将l果Q的前K)(j)储存到f[i][v][1..K]中的复杂度是O(K)。最后的{案是f[N][V][K]。ȝ复杂度是O(NVK)?/div> <div>Z么这个方法正呢Q实际上Q一个正的状态{ULE的求解q程遍历?jin)所有可用的{略Q也p盖了(jin)问题的所有方案。只不过׃是求最优解Q所以其它在M一个策略上达不到最优的Ҏ(gu)都被忽略?jin)。如果把每个状态表C成一个大ؓ(f)K的数l,q在q个数组中有序的保存该状态可取到的前K个最优倹{那么,对于M个状态的maxq算{h(hun)于两个由大到的有序队列的合q?/div> <div>另外q要注意题目对于“WK优解”的定义,策略不同但权值相同的两个Ҏ(gu)是看作同一个解q是不同的解。如果是前者,则维护有序队列时要保证队列里的数没有重复的?/div> <div>结</div> <div>昄Q这里不可能I尽背包cd态规划问题所有的问法。甚臌存在一cd背包cd态规划问题与其它领域Q例如数论、图论)(j)l合h的问题,在这论背包问题的专文中也不?x)论及(qing)。但只要深刻领会(x)前述所有类别的背包问题的思\和状态{ULE,遇到其它的变形问法,只要题目隑ֺq属于NOIPQ应该也不难惛_法。触cL通、D一反三Q应该也是一个OIer应有的品质吧?/div> <div>首页</div> <div><br></div> <div>附:(x)USACO中的背包问题</div> <div>USACO是USA Computing Olympiad的简Uͼ它组l了(jin)很多面向全球的计机竞赛zd?/div> <div>USACO Trainng是一个很适合初学者的题库Q我认ؓ(f)它的特色是题目质量高Q@序渐q,q配有不错的课文和题目分析。其中关于背包问题的那篇课文 (TEXT Knapsack Problems) 也值得一看?/div> <div>另外QUSACO Contest是USACO常年l织的面向全球的竞赛pdQ在此也推荐NOIP选手参加?/div> <div>我整理了(jin)USACO Training中涉?qing)背包问题的题目Q应该可以作Z错的?fn)题。其中标加号的是我比较推荐的Q标叹号的是我认为对NOIP选手比较有挑战性的?/div> <div>题目列表</div> <div>·         Inflate (+) Q基?1背包Q?/div> <div>·         Stamps (+)(!) Q对初学者有一定挑战性)(j)</div> <div>·         Money</div> <div>·         Nuggets</div> <div>·         Subsets</div> <div>·         Rockers (+) Q另一cL的“二维”背包问题Q?/div> <div>·         Milk4 (!) Q很怪的背包问题问法Q较隄UDP求解Q?/div> <div>题目?/div> <div>以下文字来自我所撰的《USACO?j)得》一文,该文的完整版本,包括我的E序Q可在DD的USACO征程中找到?/div> <div>Inflate 是加?1 背包问题Q也是_(d)(x)每种物品只有一Ӟ只可以选择放或者不放;而且每种物品有对应的权|目标是L值最大或最。它最朴素的状态{ULE是Qf[k][i] = max{f[k-1][i] , f[k-1][i-v[k]]+w[k]}。f[k][i]表示前k 件物品花费代价i 可以得到的最大权倹{v[k]和w[k]分别是第k 件物品的p和权倹{可以看刎ͼ f[k]的求解过E就是用第k 件物品对f[k-1]q行更新的过E。那么事实上׃用用二l数l,只需要定义f[i]Q然后对于每件物品kQ顺序地(g)查f[i]与f[i-v[k]]+w[k]的大,如果后者更大,对前者进行更新。这是背包问题中典型的优化方法?/div> <div>题目stamps 中,每种物品的用量没有直接限制Q但使用物品的总量有限制。求W一个不能用q有限个物品l成的背包的大小。(可以q样{h(hun)地认为)(j)设f[k][i] 表示前k 件物品组成大ؓ(f)i 的背包, 最需要物品的数量。则f[k][i]= min{f[k-1][i],f[k-1][i-j*s[k]]+j}Q其中j 是选择使用Wk 件物品的数目Q这个方E运用时可以用和上面一L(fng)Ҏ(gu)处理成一l的。求解时先设|一个粗p的循环上限Q即最大的物品乘最多物品数?/div> <div>Money 是多重背包问题。也是每个物品可以使用无限多次。要求解的是构成一U背包的不同Ҏ(gu)L。基本上是把一般的多重背包的方E中的min Ҏ(gu)sum p?jin)?/div> <div>Nuggets 的模型也是多重背包。要求求解所l的物品不能恰好攑օ的背包大的最大|可能不存在)(j)。只需要根?#8220;若i、j 互质Q则关于x、y 的不定方Ei*x+y*j=n 必有正整数解Q其中n>i*j”q一定理得出一个@环的上限?Subsets 子集和问题相当于物品大小是前N 个自然数时求大小为N*(N+1)/4 ?01 背包的方案数?/div> <div>Rockers 可以利用求解背包问题的思想设计解法。我的状态{ULE如下:(x) f[i][j][t]=max{f[i][j][t-1] , f[i-1][j][t] , f[i-1][j][t-time[i]]+1 , f[i-1][j-1][T]+(t>=time[i])}。其?f[i][j][t]表示前i 首歌用j 张完整的盘和一张录?jin)t 分钟的盘可以攑օ的最多歌敎ͼT 是一张光盘的最大容量,t>=time[i]是一个bool D{换成int 取gؓ(f)0 ?。但我后来发现我当时设计的状态和方程效率有点低,如果换成q样Qf[i][j]=(a,b)表示前i 首歌中选了(jin)j 首需要用到a 张完整的光盘以及(qing)一张录?jin)b 分钟的光盘,?x)将时空复杂度都大大降低。这U将状态的DZl的Ҏ(gu)值得注意?/div> <div>Milk4 是这些类背包问题中难度最大的一道了(jin)。很多h无法做到它用纯DP Ҏ(gu)求解Q而是用P代加深搜索枚举用的Ӟ其转换成多重背包问题再DP。由?USACO 的数据弱QP代加q深度很小Q这样也可以ACQ但我们q是可以用纯DP Ҏ(gu)它完美解决的。设f[k]为称量出k 单位牛奶需要的最的桶数。那么可以用cM多重背包的方法对f 数组反复更新以求得最倹{然而困隑֜于如何输出字典序最的Ҏ(gu)。我们可以对每个i 记录pre_f[i]和pre_v[i]。表C得到i 单位牛奶的过E是用pre_f[i]单位牛奶加上若干个编号ؓ(f)pre_v[i]的桶的牛奶。这样就可以一步步求得得到i 单位牛奶的完整方案。ؓ(f)?jin)?gu)的字典序最,我们在每ơ找C个耗费桶数相同的方案时对已储存的方案和新方案进行比较再军_是否更新Ҏ(gu)。ؓ(f)?jin)ɘq种比较快捷Q在使用各种大小的桶对f 数组q行更新时先大后地q行。USACO 的官斚w解正是这一思\。如果认Z上文字比较难理解可以阅读官方E序或我的程序?/div> <div>首页</div> <div>Copyright (c) 2007 Tianyi Cui</div> <div>Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.</div> <div>整理 by stntwm</div> </div> <div><br></div> <img src ="http://www.shnenglu.com/vontroy/aggbug/116195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/vontroy/" target="_blank">Vontroy</a> 2010-05-23 22:41 <a href="http://www.shnenglu.com/vontroy/archive/2010/05/23/116195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.bodycode.net.cn" target="_blank">Ļ뾫ƷԴþ</a>| <a href="http://www.kinbay.cn" target="_blank">þۺɫ</a>| <a href="http://www.jw62.cn" target="_blank">žžƷ99þþ㽶</a>| <a href="http://www.nxyb.net.cn" target="_blank">þþþþþ97</a>| <a href="http://www.wyj325.cn" target="_blank">þù޾Ʒ</a>| <a href="http://www.globalimports.cn" target="_blank">޹뾫ƷŮ˾þþò </a>| <a href="http://www.fengguan1688.cn" target="_blank">þۺ97ɫһһ </a>| <a href="http://www.xbbu.cn" target="_blank">޳˾þ</a>| <a href="http://www.acesolo.cn" target="_blank">ѹۿ˾þѹۿ</a>| <a href="http://www.aiwon.cn" target="_blank">Ʒþþþþ֣ݹ˾</a>| <a href="http://www.foundxy.cn" target="_blank">þþþþþŮú</a>| <a href="http://www.uzhp.cn" target="_blank">˾þô߽ۺ</a>| <a href="http://www.hzust.cn" target="_blank">þ޾Ʒվ</a>| <a href="http://www.qzxqd.cn" target="_blank">鶹avþavʢav</a>| <a href="http://www.ghmsgs.cn" target="_blank">޹ƷþõӰŷ</a>| <a href="http://www.jiansuj.cn" target="_blank">ŷ޾ƷþþavӰ </a>| <a href="http://www.zgktjj.cn" target="_blank">ĻƷѾþ</a>| <a href="http://www.mingyixiu.cn" target="_blank">þһѲ</a>| <a href="http://www.sf1768.cn" target="_blank">þþƷһAV</a>| <a href="http://www.taibeitengxun.cn" target="_blank">99Ʒ99þþþþ97</a>| <a href="http://www.h2ofood.cn" target="_blank">þù޾Ʒ</a>| <a href="http://www.zhijin168.com.cn" target="_blank">޹ƷȾþ</a>| <a href="http://www.e-li.cn" target="_blank">㽶þӰԺ</a>| <a href="http://www.pingpangq.cn" target="_blank">þùѹۿƷ3</a>| <a href="http://www.ofuax.cn" target="_blank">þŷձƷ</a>| <a href="http://www.bwgwdl.cn" target="_blank">պAvĻþþ޸</a>| <a href="http://www.anfubbs.cn" target="_blank">һþۺ³³ŷһ </a>| <a href="http://www.033009.cn" target="_blank">ƷƵþþ</a>| <a href="http://www.tduck.cn" target="_blank">ƷþþþþþþþĻ </a>| <a href="http://www.sangaotang.cn" target="_blank">þۺϹapp </a>| <a href="http://www.japjoy.cn" target="_blank">þҹҹݺ</a>| <a href="http://www.0558pet.cn" target="_blank">þˬˬƬAV </a>| <a href="http://www.zawin.cn" target="_blank">þer99ȾƷһ</a>| <a href="http://www.gvyf.cn" target="_blank">ˬˬƬaþ</a>| <a href="http://www.zgcl.org.cn" target="_blank">þþþƷҰ</a>| <a href="http://www.sj-gd.cn" target="_blank">˾þۺ</a>| <a href="http://www.wenlitown.cn" target="_blank">99Ʒþ</a>| <a href="http://www.fozhun.cn" target="_blank">þþһƷ99þþƷ88</a>| <a href="http://www.338z.cn" target="_blank">þþþùƷ</a>| <a href="http://www.swfun.com.cn" target="_blank">޾ƷþþþþðĦ</a>| <a href="http://www.mens-uno.com.cn" target="_blank">ѹ99þþ㽶</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>