本来是一道很水的树形DP题

设dp[i][j]表示,带着j个人去攻打以节点i为根的子树的最大收益

结果wa了一整晚

原因:

坑点1:

即使这个节点里面没有守卫,你如果想获得这个节点的收益,你还是必须派一个人去这个节点,不然谁帮你去拿收益?

坑点2:

题目说是从节点1开始攻打,然后我就以为给出的数据都是以1为根节点的,就没有加双向边

不过,

最后我加了双向边,然后还是wa了

又找了很久,最后发现是前向星的数组开小了

注意:数组开小了可能会返回wa,tle,re等等等等

 #include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; const int maxn=; int dp[maxn][maxn];
int bug[maxn];
int val[maxn]; struct Edge
{
int to,next;
};
Edge edge[maxn<<];
int head[maxn];
int tot,n,m; void init()
{
memset(head,-,sizeof head);
tot=;
} void addedge(int u,int v)
{
edge[tot].to=v;
edge[tot].next=head[u];
head[u]=tot++;
} int solve(); int main()
{
while(scanf("%d %d",&n,&m)){
if(n==-&&m==-)
break;
init();
for(int i=;i<=n;i++){
int u;
scanf("%d %d",&u,&val[i]);
bug[i]=(u+)/;
}
for(int i=;i<n;i++){
int u,v;
scanf("%d %d",&u,&v);
addedge(u,v);
addedge(v,u);
} printf("%d\n",solve());
}
return ;
} void dfs(int u,int pre)
{
if(bug[u]>m)
return ;
for(int i=bug[u];i<=m;i++)
dp[u][i]=val[u];
for(int i=head[u];~i;i=edge[i].next){
int v=edge[i].to;
if(v==pre)
continue;
dfs(v,u);
for(int j=m;j>=bug[u];j--){
for(int k=;k<=j-bug[u];k++){
dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[v][k]);
}
}
}
} int solve()
{
if(m==)
return ;
memset(dp,,sizeof dp);
dfs(,-); return dp[][m];
}

HDU 1011 Starship Troopers 树形DP 有坑点的更多相关文章

  1. hdu 1011 Starship Troopers(树形DP入门)

    Starship Troopers Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  2. [HDU 1011] Starship Troopers (树形dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011 dp[u][i]为以u为根节点的,花了不超过i元钱能够得到的最大价值 因为题目里说要访问子节点必 ...

  3. hdu 1011 Starship Troopers 树形背包dp

    Starship Troopers Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  4. hdu 1011 Starship Troopers(树形背包)

    Starship Troopers Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  5. HDU 1011 Starship Troopers 树形+背包dp

    http://acm.hdu.edu.cn/showproblem.php?pid=1011   题意:每个节点有两个值bug和brain,当清扫该节点的所有bug时就得到brain值,只有当父节点被 ...

  6. HDU 1011 Starship Troopers (树dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011 题意: 题目大意是有n个房间组成一棵树,你有m个士兵,从1号房间开始让士兵向相邻的房间出发,每个 ...

  7. HDU 1011 Starship Troopers【树形DP/有依赖的01背包】

    You, the leader of Starship Troopers, are sent to destroy a base of the bugs. The base is built unde ...

  8. hdu 1011 Starship Troopers 经典的树形DP ****

    Starship Troopers Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  9. hdu 1011(Starship Troopers,树形dp)

    Starship Troopers Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...

随机推荐

  1. spark yarn-cluster 和 yarn-client提交的配置

    1. spark conf 目录下需要配置进去hadoop home 2.需要spark 提交的配置文件 加上‘-- master yarn-cluster/yarn-client’设置提交的模式

  2. POJ-2481 Cows (线段树单点更新)

    题目大意:给n个区间,对于任意一个区间,求出能完全包含它并且长度比它长的区间的个数. 题目分析:将一个区间视为二位坐标系中的一个点,左端点视作横坐标,右端点视作纵坐标.则题目变成了求每个点的左上方.正 ...

  3. JSBinding + SharpKit / 原理篇:Delegate

    以 NGUI 的 UIEventListener 为例: 有一个类: using SharpKit.JavaScript; using UnityEngine; using System.Collec ...

  4. android屏幕亮度

    /** * 获得当前屏幕亮度的模式 * SCREEN_BRIGHTNESS_MODE_AUTOMATIC=1 为自动调节屏幕亮度 * SCREEN_BRIGHTNESS_MODE_MANUAL=0 为 ...

  5. lucene 专业名词作用整理

    是否切词:对关键词是否切分,举例,姓名域的一个值:"张三" , 是否切分成"张"."三"等等多个term. 是否索引:建立索引的时候是否对该 ...

  6. WCF入门教程三[WCF的宿主]

    一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...

  7. Axure折叠与展开效果的实现

    http://www.masterchat.cn/article/20120501/217.html 视频教程 项目效果 点击表头,内容会展开或者收缩. 第一步,用矩形工具分别建立如下效果的图形 2, ...

  8. docker nodejs 基本应用

    1. 安装docker 环境 2. nodejs  应用布局 package.json { "name": "docker-centos-hello", &qu ...

  9. Sublime Text3注册码 (备用)

    复制如下三个任意一个正版注册码即可—– BEGIN LICENSE —–Andrew WeberSingle User LicenseEA7E-855605813A03DD 5E4AD9E6 6C0E ...

  10. 计算机中丢失 msvcr110.dll 怎么办

    笔者在一次运行 php.exe 时,运到“无法启动此程序,因为计算机中丢失 MSVCR110.dll.尝试重新安装该程序以解决此问题.”的提示,当时很无语,因为系统是刚刚安装好的,而且是最新版本的. ...