摘要: 简单的一道DP,只不过是每个状态与三个子状态有关,令res[i][j]表示从第一层到达map[i][j]的最小费用。本应该res[i][j]=min(res[i-1][j],res,[i][j+1],res[i][j-1])+map[i][j];但是在res[i][j+1]是在res[i][j]求出来之后才求出来,那我们怎么办呢?我们可以这样处理:每一行正反各求一次取最小值。#include<iostream>#include<cstdio>#include<cstring>#include<stack>using namespace std;# 阅读全文
posted @ 2012-04-06 19:14 书山有路,学海无涯 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 树形DP,令res[i][j]表示以i为根的子树删除j条边所保留的最大苹果数;res[i][j]=max(res[i][j],res[lChild][k]+res[rChild][j-k]+value[i]);(0<=j<=inum[i],0<=k<=inum[lChild])inum[i]表示以i为根的子树树枝的个数,value[i]以i为端点的树枝的苹果树。代码如下:#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define MAX 阅读全文
posted @ 2012-04-06 14:32 书山有路,学海无涯 阅读(182) 评论(0) 推荐(0) 编辑