⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 数型dp2.html

📁 DP代码加解释~~~在网手收集起来的论文解题报告
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<html><head><!--STATUS OK-->
<meta http-equiv="content-type" content="text/html; charset=GB2312"><title>树型DP 经典2题(转载)_想飞</title>
<style>.error{color:#FF0000;font-size:12px}</style>
<script type="text/javascript" src="%E6%95%B0%E5%9E%8BDP2_files/global.js"></script>
<script language="javascript" src="%E6%95%B0%E5%9E%8BDP2_files/popup.js"></script>
<script language="JavaScript" src="%E6%95%B0%E5%9E%8BDP2_files/g_spjs.js"></script>
<script language="javascript">
<!--

var allkey="";
var i=0;
var flag=0;
function setpv(allnum)
{
	var num = allnum.split('_');
	document.getElementById("result").innerHTML=num[0];
}
		 
function checkMail(s) 
{ 
  	var pattern=/\w+@\w+\.[a-z]+/; 
  	if(pattern.test(s)) 
    { 
       return true; 
    } 
  	else 
   { 
      return false; 
   } 
} 


function checkeandu(eanduid)
{
	var eanduvalue=G(eanduid).value;
	var len=bytes(eanduvalue);
	if(len>128)
	{
		showErr(2,"您输入的网址或邮箱太长,请保持在128字节以内。");
		return false;
	}
	else
	{ 
		 return true;
	}
		
}

function cmtdel(str)
{
	var pop=new Popup({ contentType:3,isReloadOnClose:false,width:340,height:80});
	pop.setContent("title","删除评论");
	pop.setContent("confirmCon","您确定要彻底删除这条评论吗?");
	pop.setContent("callBack",delCallback2);
	pop.setContent("parameter",{fid:str,popup:pop});
	pop.build();
	pop.show();
	return false;
}
function delCallback2(para)
{
	var o_pop=para["popup"];
	o_pop.config.contentType=1;
	o_pop.setContent("contentUrl","");
	o_pop.reBuild();
	G(para["fid"]).target=o_pop.iframeIdName;
	eval("document."+para["fid"]).submit();
}



function checkname(strid)
{
	var ele=document.getElementById(strid);
	var len=bytes(ele.value);
	if(len>49)
	{
		showErr(1,"您输入的姓名太长,请保持在49字节以内。");
		return false;
	}
	else 
	{		
		if(len==0)
		{
			document.getElementById(strid).value="匿名网友";
		}
		 return true;
	}	
	
}

function checktext(textid)
{
		document.getElementById(textid).value=trimlr(textid);
		var str=trimrn(textid);
		len=str.length;
		if(len==0 || ((/^[\s, ]+$/gi).test(str)) )
		{
			showErr(3,"您必须输入评论内容,请检查。");
			return false;
		}
		else 
		{
				if(len>1000)
				{
					showErr(3,"您输入的评论内容太长,请保持在500字以内。");
					return false;
				}
			return true;
		}	
}

function showErr(index,str)
{
	G(index+"_err").style.display="";
	G(index+"_err_con").innerHTML=str;
}
function hidErr(index)
{
	G(index+"_err").style.display="none";
	G(index+"_err_con").innerHTML="";
}

function alertPop(tit,con)
{
	var pop=new Popup({ contentType:4,isReloadOnClose:false,width:340,height:80});
	pop.setContent("title",tit);
	pop.setContent("alertCon",con);
	pop.build();
	pop.show();
}

function cmtfull()
{
	var cnum=0;
	if(cnum>=50000)
	{
		alertPop("发表评论","单篇日志评论数最多为50000条.");
		return false;
	}
	else
	{
		return true;
	}
}

function checkcmtform()
{
	if(checkname("spBlogCmtor")&&checkeandu("spBlogCmtURL")&&checktext("spBlogCmtText")&&cmtfull())
	{
		submitForm();
		return true;
	}
	else
	{
		return false;
	}
}

var g_pop=null;
function submitForm()
{
	g_pop=new Popup({ contentType:1,isReloadOnClose:false,width:340,height:80});
	g_pop.setContent("title","添加评论");
	g_pop.setContent("contentUrl","");
	g_pop.setContent("someDisabledBtn","btn_ok");
	g_pop.build();
	G("popFormSubmit").target=g_pop.iframeIdName;
	g_pop.show();
}

function g_close_pop()
{
	g_pop.close();
}

function formatonlinpic()
{
var picobj=document.getElementsByName("onlinepic");
var picnum=picobj.length;
	
	for(var i=0;i<picnum;i++)
	{
		if(picobj[i].width>200)
		{
			picobj[i].width=200;
		}
		if(picobj[i].height>200)
		{
			picobj[i].height=200;
		}
	}

}

function addToFavor(){
var blogTitle='树型DP 经典2题(转载)'.replace(/&#39;/g,'\'');
window.open('http://cang.baidu.com/do/add?it='+encodeURIComponent(blogTitle+'_百度空间')+'&iu='+encodeURIComponent(location.href)+'&fr=sp#nw=1','_s','scrollbars=no,width=600,height=450,right=75,top=20,status=no,resizable=yes'); 
return false;
}

var isIE = /*@cc_on!@*/false;
function tracker(did,a){
	return function(){
		var t=new Date().getTime();
		var href=a.href;
        if(isIE){
            var r = /href\s*=\s*("|')?([^\s]*)\1/gi;
            if(r.test(a.outerHTML))
                href = RegExp.$2;
        }
        new Image().src = "http://hi.baidu.com/sys/statlog/1.gif?m=" + did + "&v=" + encodeURIComponent(href) + "&c=" + encodeURIComponent(location.href) + "&t="+t;
	}
}

function tracker_init(did){
	var _s=document.getElementById(did);
	var as = _s.getElementsByTagName('A');
	for(var i = 0, j = as.length; i < j; i ++){
		var a = as[i];
		if(isIE){
			a.attachEvent("onclick", tracker(did,a));
		}else{
			a.addEventListener("click", tracker(did,a), false);
		}
	}
}



//-->
</script>

<script type="text/javascript">
/*<![CDATA[*/
var RelatedDocData = null, GetAndEval = false;
(function(){
	var xhr = BdAjax.getXHR();
	if(xhr == null){
		RelatedDocData = -1;
		return;
	}

	xhr.open("GET", "/sys/search?type=8&word=%CA%F7%D0%CDDP%20%BE%AD%B5%E42%CC%E2%28%D7%AA%D4%D8%29&item=b567f5597ecbdd2c2934f05e&t=" + new Date().getTime(), true);	
	xhr.onreadystatechange = function(){
		if(xhr.readyState == 4){
			if(xhr.status == 0 || xhr.status == 200){
				if(GetAndEval){
					eval(xhr.responseText);
				}else{
					RelatedDocData = xhr.responseText;
				}
			}
		}
	}
	xhr.send(null);
})();
/*]]>*/
</script>

</head><body onload="formatonlinpic();">
<center>
<script type="text/javascript">
/*<![CDATA[*/
if(top.location != self.location){
	top.location = self.location;
}
var myref = encodeURI("http://hi.baidu.com/windog18/blog/item/b567f5597ecbdd2c2934f05e%2Ehtml");
/*]]>*/
</script>
<link rel="stylesheet" type="text/css" href="%E6%95%B0%E5%9E%8BDP2_files/mods.css">

<link rel="stylesheet" type="text/css" href="%E6%95%B0%E5%9E%8BDP2_files/7275c643d9e5e6119313c601.css">

<link rel="stylesheet" type="text/css" href="%E6%95%B0%E5%9E%8BDP2_files/space.css">
<style type="text/css"> 
/*<![CDATA[*/

#usrbar{padding:4px 10px 3px 0;font-size:12px;height:19px;line-height:19px;color:#000000;font-family:Arial;text-align:right;background:#ffffff;filter:alpha(opacity=65);-moz-opacity:0.5;width:auto !important;width:100%;letter-spacing:normal}
#usrbar a,#usrbar a:link,#usrbar a:visited{color:#0000CC;text-decoration:underline}
#ft{clear:both;height:20px;line-height:20px;color:#666666;font-size:12px;font-family:Arial;text-align:center}
#ft a,#ft a:link,#ft a:visited{color:#7777CC;text-decoration:underline}
#usrbar,#usrbar a,#usrbar a:link,#usrbar a:visited,#ft,#ft a,#ft a:link,#ft a:visited{letter-spacing:normal}
/*]]>*/
</style>


<div id="usrbar"><nobr>

			<a href="http://www.baidu.com/" target="_blank">百度首页</a> 
		| <a id="hi_index" href="http://hi.baidu.com/" target="_blank">百度空间</a>
		<script type="text/javascript">
		document.write('| <a href="http://passport.baidu.com/?login&tpl=sp&tpl_reg=sp&u=http://hi.baidu.com' + encodeURI('/windog18/blog/item/b567f5597ecbdd2c2934f05e%2Ehtml') + '">登录</a>');
		</script>| <a href="http://passport.baidu.com/?login&amp;tpl=sp&amp;tpl_reg=sp&amp;u=http://hi.baidu.com/windog18/blog/item/b567f5597ecbdd2c2934f05e%252Ehtml">登录</a>
		
</nobr></div>


<div id="main" align="left">
<!--[if IE]>
<script>
var objmain = document.getElementById("main");
function updatesize(){ var bodyw = window.document.body.offsetWidth; if(bodyw <= 790) objmain.style.width="772px"; else if(bodyw >= 1016) objmain.style.width="996px"; else objmain.style.width="100%"; }
updatesize(); window.onresize = updatesize;
</script>
<![endif]-->
	<div id="header">
	<div class="lc"><div class="rc"></div></div>
<div class="tit"><a href="http://hi.baidu.com/windog18" class="titlink" title="windog18的空间 http://hi.baidu.com/windog18">想飞</a></div>
<div class="desc">飞翔吧~~~</div>
<div id="tabline">&nbsp;</div>
	<div id="tab"><a href="http://hi.baidu.com/windog18">主页</a><a href="http://hi.baidu.com/windog18/blog" class="on">博客</a><a href="http://hi.baidu.com/windog18/album">相册</a><span>|</span><a href="http://hi.baidu.com/windog18/profile">个人档案</a>
	<span>|</span><a href="http://hi.baidu.com/windog18/friend">好友</a>



	</div>
</div>

<div class="stage">
<div class="stagepad">
<div style="width: 100%;">

	<table class="modth" width="100%" border="0" cellpadding="0" cellspacing="0">
	<tbody><tr><td class="modtl" width="7">&nbsp;</td>
	<td class="modtc" nowrap="nowrap"><div class="modhead"><span class="modtit">查看文章</span></div></td>
	<td class="modtc" align="right" nowrap="nowrap"></td>
	<td class="modtr" width="7">&nbsp;</td>
	</tr></tbody></table>

<div id="m_blog" class="modbox">
<div class="tit">树型DP 经典2题(转载)</div>
<div class="date">2008-07-19  11:26</div>
<table style="table-layout: fixed;"><tbody><tr><td><div id="blog_text" class="cnt"><p><font size="3"><strong>题目一:道路重建(USACO_2002_Feb02 Rebuilding Roads)(PKU1947)</strong></font>(程序附后)<br>
题目大意是给一棵树,要去掉最少的边,使一棵子树从中分离出来,且这棵子树要恰有B个节点。<br>
<br>
很容易想到此题为树型Dp,用状态[i,j]来表示以节点i为根,得到一棵j个节点的子树至少要去多少条边(请注<br>
意,这里定义的节点i是这棵子树的根,所以一定包含这棵去掉一些边后所得到的j个节点的子树里面)。怎么<br>
转移呢?如果穷举i的子节点保留还是不保留,如果保留,保留多少个。那么这道题目又退化成完全的搜索了。。不难想到,因为节点i的所有子节点是一个线性结构,我们可以双重Dp!!<br>
<br>
下面讲一下第二重的Dp:<br>
对于一个节点i,<br>
设它的儿子依次为1,2,....,x.再设一个状态(k,m)表示到节点i的第k个儿子,要保留m个节点,至少要去掉多少条边.这样,对于这个节点i,
我们得到它的儿子的序列1,2,....,x.按照1到X的线性顺序进行动态规划.显然,当我们规划到i的儿子k时,有两种选择,一是选这个k,二是不选
这个k,<br>
1.如果不选k,那么(k-1,m)+1---&gt;(k,m)(加1是因为不选这个儿子k,所以k和i所连的边应该断开,那么花费就要加1).<br>
2.如果选nk,那么(k-1,j)+[k,m-j]---&gt;(k,m)(注意,中括号所表示的状态时第一重动规所得到的状态,在这里[k,m-j]的意思就是节点k为根,得到一棵(m-j)个节点的子树至少要去多少条边)</p>
<p>那么就很容易转移了:(k,m)=min{(k-1,j)+[k,m-j]{0&lt;=j&lt;=m},(k-1,m)+1},边界自己想
吧。。。。。对于这个节点i,算完所有的(1,m),(2,m),...,(x,m)后,[i,m+1]就等于(x,m)(这里+1是因为i这个节点要保
留),每次算出(i,B)后,动态更新下ans就行了...Dp时候的顺序可以记忆化搜索,也可以按后序遍历的顺序进行Dp...</p>
<p>尽管讲了这么多,感觉还是有很多细节问题没有讲清楚,这还是要自己思考一下的,这里只是提供了一个大致的<br>
思路而已...(更多时候,这个思路可能只有作者本人才能看懂的<font size="4"><strong>--!</strong></font>)。如果谁有更好的方法,欢迎留言<strong><font size="4">:)</font></strong></p>
<p><strong><font size="3">题目二: 贪吃的九头龙(NOI2002_DAY1)</font></strong><br>
题目大意是给一棵树,再给m种点,这些点要覆盖这棵树的所有节点,且每种种类的点至少要用一次,还规定第一种点必须恰好用K次。这棵树的每一条边都有一个
权值(每条边的权值可能不同)。对于某条边,若这条边的两个顶点种类相同,则总权值需要加上这条边的权值。问总权值最少是多少。(可能描述的有些模糊,不

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -