很好的树形DP,破环为树;这道题目很特殊,看到的时候根本无从下手,因为以前没接触过这种类型的树形DP,网上搜了一下发现自己简直弱爆了。。这是一类最简单的树形DP,考虑某个节点选或不选,然后把两种状态从叶子向根更新上去即可,但是这道题中给你的不是一棵树,是图,特殊的图每个点都只有一个父亲(或一个儿子),所以形成的环是简单环,所以可以考虑破环,从环上的一个点出发开始DP,这个点的两种状态(选或不选)分别枚举一下View Code #include<cstdio>#include<cstring>#include<algorithm>using namespace Read More
posted @ 2012-07-11 23:10 Because Of You Views(782) Comments(0) Diggs(0) Edit
主要能解决的问题n个数中选取k个不相邻的数,使得这k个数的总和最小View Code #include<cstdio>#include<cstring>#include<algorithm>using namespace std;int dp[2010][1010];int a[2012];const int inf = INT_MAX;int main(){ int n,k; while(scanf("%d%d",&n,&k)!=EOF) { for(int i=1;i<=n;i++) scanf("%d Read More
posted @ 2012-07-11 21:54 Because Of You Views(289) Comments(2) Diggs(0) Edit