上一页 1 ··· 6 7 8 9 10 11 12 13 下一页

2013年8月18日

hdu1561 The more, The Better 树形DP+分组背包

摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1561思路:典型的树形背包题目:定义dp[i][j]表示以i为根节点,攻打j个城堡的获得的财宝的最优值,那么dp[i][j]=max(dp[i][j],dp[son][k]+dp[i][j-k]) 其中son为i的儿子然后从叶子节点往上进行背包即可刚接触的同学会有疑问:就是不知道怎样将题目中的数据建为一个树,其实很简单,只要把0作为根结点即可 0节点的value初始化为0然后dp[0][m+1]即为求得的答案,是不是很简单啊。。。。注意初始化。代码如下: 1 #include 2 #include 阅读全文

posted @ 2013-08-18 18:20 GyyZyp 阅读(151) 评论(0) 推荐(0) 编辑

hdu1520 Anniversary party 简单树形DP

摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520思路:树形DP的入门题定义dp[root][1]表示以root为根节点的子树,且root本身参加party的最优值,那么dp[root][1]+=Σdp[son][0]+happy[root];dp[root][0]表示以root为跟节点且root本身没有参加的最优值,那么dp[root][0]+=max(dp[son][0],dp[son][1]);如果不理解,可以参考我对hdu1054的解释。代码如下: 1 #include 2 #include 3 #include 4 #include 阅读全文

posted @ 2013-08-18 16:58 GyyZyp 阅读(137) 评论(0) 推荐(0) 编辑

hdu1054 Strategic Game 树形DP

摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054思路:树形DP,用二分匹配也能解决定义dp[root][1],表示以root 为根结点的子树且在root放一个士兵的最优值,那么因为在root已经有士兵了,所以对其孩子来说可以放也可以不放那么dp[root][1]+=min(dp[son][1],dp[son][0]);dp[root][0]表示以root为根结点的子树且在root没有放士兵的最优值,那么因为在root没有士兵,所以在其孩子节点一定要放一个士兵,才能保证与其相连的边被观察到,那么dp[root][0]+=dp[son][1]; 阅读全文

posted @ 2013-08-18 15:42 GyyZyp 阅读(172) 评论(0) 推荐(0) 编辑

hdu1011 Starship Troopers 树形DP

摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011思路:很明显的树形背包定义dp[root][m]表示以root为根,派m个士兵的最优解,那么dp[root][m]=max(dp[root][m],dp[root][k]+dp[son][j]) k+j 2 #include 3 #include 4 #include 5 using namespace std; 6 #define MAX 110 7 int n,m; 8 int dp[MAX][MAX]; 9 int tol;10 class node11 {12 public:13... 阅读全文

posted @ 2013-08-18 14:37 GyyZyp 阅读(188) 评论(0) 推荐(0) 编辑

2013年8月17日

hdu4681 String DP(2013多校第8场)

摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681思路:我是胡搞过的就是先预处理出(i,j)的正向的最大连续子串和逆向最大连续子串然后对于A,B分别将满足包含C串的所有子串的开头和结尾坐标起来那么ans=min(dp1[i-1][j-1]+len+dp2[i+1'][j'+1]),其中(i,i')(j.j')分别表示在A,B串中C串的开头和结尾坐标,len为C串长度代码: 阅读全文

posted @ 2013-08-17 00:26 GyyZyp 阅读(112) 评论(0) 推荐(0) 编辑

zoj3469 Food Delivery 区间DP

摘要: 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3469很好的区间DP思路:我们可以自己在本子上画一个x轴模拟一下过程,然后我们会发现对于一个区间(l,r),一旦我们访问完了l和r,那么对于整个由(l,r)组成的区间,我们一定也已经访问过了所以我们可以定义dp[l][r][0]表示访问完区间[i,j]并留在左端点,dp[i][j][1]表示访问完区间[i,j]并留在右端点。那么我们就比较容易的出状态转移方程:dp[i][j][0] 可以根据dp[i+1][j][0]和dp[i+1][j][1]得到。dp[i][ 阅读全文

posted @ 2013-08-17 00:17 GyyZyp 阅读(203) 评论(0) 推荐(0) 编辑

2013年8月16日

LightOJ 1422 -Halloween Costumes 区间DP

摘要: 题目链接:http://lightoj.com/volume_showproblem.php?problem=1422区间DP的思路:对于区间(i,j)如果第i件衣服和区间内的其他从i+1到j的衣服都不同,即第i件衣服在这个区间我们只穿一次,那么dp[i][j]=dp[i+1][j]+1;否则遍历k(i 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAX 110 8 int dp[MAX][MAX]; 9 int n;10 int a[MAX];11 int main()12 {13 阅读全文

posted @ 2013-08-16 23:57 GyyZyp 阅读(296) 评论(0) 推荐(0) 编辑

2013年8月14日

hdu4283 You Are the One 区间DP

摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4283自己想了很久还是不会,参考了别人的思路才写的,区间DP还是很弱,继续努力!!思路:转载:题解:想dp[i][j]表示[i ,j]内的unhappiness最小值,枚举k(i 2 #include 3 #include 4 #include 5 using namespace std; 6 #define INF 1000010111 7 int n; 8 int a[110]; 9 int dp[110][110];10 int sum[110];11 int order[110][110.. 阅读全文

posted @ 2013-08-14 21:54 GyyZyp 阅读(233) 评论(0) 推荐(0) 编辑

2013年8月13日

poj1651 Multiplication Puzzle 区间DP

摘要: 题目链接:http://poj.org/problem?id=1651区间DP思想:定义dp[i][j]表示区间(i,j)删除其中的所有元素后(当然是不包括i,j了啊)的最优值,那么dp[i][j]=min(dp[i][k]+dp[k][j]),其中k为区间i,j中最后删除的元素,(i 2 #include 3 #include 4 #include 5 using namespace std; 6 #define INF 10000100 7 int dp[110][110]; 8 int a[110]; 9 void init()10 {11 for(int i=0;i>a[... 阅读全文

posted @ 2013-08-13 10:13 GyyZyp 阅读(216) 评论(0) 推荐(0) 编辑

2013年8月12日

codeforce 149D Coloring Brackets 区间DP

摘要: 题目链接:http://codeforces.com/problemset/problem/149/D继续区间DP啊。。。。思路:定义dp[l][r][c1][c2]表示对于区间(l,r)来说,l用c1染色,r用c2染色的方案数。那么:1,如果括号l和括号r匹配(即括号l和r为一对括号)那么dp[l][r][c1][c2]+=dp[l+1][r-1][i][j](i与c1为不同的颜色,j与c2是不同的颜色,或i=0或j=0)2,如果括号l和括号r不匹配,那么dp[l][r][c1][c2]+=dp[l][m(l)][c1][i]*dp[m(l)+1][r][j][c2];(i与c1为不同的颜色 阅读全文

posted @ 2013-08-12 23:02 GyyZyp 阅读(214) 评论(0) 推荐(0) 编辑

上一页 1 ··· 6 7 8 9 10 11 12 13 下一页

导航