题意:有n个房间结构可看成一棵树,有m个士兵,从1号房间开始让士兵向相邻的房间出发,每个房间有一定的敌人,每个士兵可以对抗20个敌人,士兵在某个房间对抗敌人使无法走开,同时有一个价值,问你花费这m个士兵可以得到的最大价值是多少

链接:点我

分析:树形dp,对于点u,dp[u][j]表示以u为根的树消耗j个士兵得到的最大值,dp[i][j]=max(dp[i][j],dp[i][j-k]+dp[son][k]+val[u])

注意是无向图,vis位置不能随便放,且注意dp不能直接+val,因为这样根节点就加不到val了

虽然方程很快就想出来了,真写起来wa点还是很多的

第二次做

 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
using namespace std;
#define MOD 1000000007
const int INF=0x3f3f3f3f;
const double eps=1e-;
typedef long long ll;
#define cl(a) memset(a,0,sizeof(a))
#define ts printf("*****\n");
const int MAXN=;
int n,m,tt;
int aa[MAXN];
int tot,head[MAXN],dp[MAXN][MAXN],in[MAXN];
int bug[MAXN],val[MAXN],vis[MAXN];
struct Edge
{
int to,next;
}edge[MAXN<<];
void addedge(int u,int v)
{
edge[tot].to=v;
edge[tot].next=head[u];
head[u]=tot++;
}
void dfs(int u)
{
vis[u]=;
int num=(bug[u]+)/;
for(int i=num;i<=m;i++) dp[u][i]=val[u];
for(int i=head[u];i!=-;i=edge[i].next)
{
int v=edge[i].to;
if(vis[v]) continue;
dfs(v);
for(int j=m;j>=num;j--)
{
for(int k=;j-k>=num;k++) //派k人攻打其他地方
{
dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[v][k]);
}
}
}
}
void init()
{
tot=;
memset(head,-,sizeof(head));
cl(dp);
cl(vis);
}
int main()
{
int i,j,k;
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==-&&m==-) break;
init();
for(i=;i<=n;i++)
{
scanf("%d%d",&bug[i],&val[i]);
}
int u,v;
for(i=;i<=n-;i++)
{
scanf("%d%d",&u,&v);
addedge(u,v);
addedge(v,u);
}
if(m==)
{
printf("0\n");
continue;
}
dfs();
printf("%d\n",dp[][m]);
}
}

最新文章

  1. Linux C编程学习之C语言简介---预处理、宏、文件包含……
  2. LSD-SLAM深入学习(1)-基本介绍与ros下的安装
  3. 怎么简单获取input file 选中的图片,并在一个div的img里面赋值src实现预览?
  4. LINUX yum用法
  5. Octopus系列之SQLite3常用命令
  6. android关于installLocation
  7. solr 3.5 配置及server设置
  8. rails总结
  9. myeclipse自动生成注释
  10. REDGATE又一好用的脚本工具ScriptsManager1.3
  11. poj 2182 Lost Cows(段树精英赛的冠军)
  12. vue爬坑:把对象中的数据给了某个变量,改变一个对象的值,另一个对象也变化
  13. 上传文件代码报错,java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileItemFactory
  14. PAT L2-020 功夫传人
  15. PDF如何设置书签,怎么在PDF上添加书签
  16. Java的各种打包方式
  17. 算法笔记_202:第三届蓝桥杯软件类决赛真题(Java高职)
  18. 加密算法(扩展知识:Base64编码)
  19. iframe跨域与session失效问题
  20. Minix2.0操作系统公用头文件说明

热门文章

  1. 【洛谷 P3191】 [HNOI2007]紧急疏散EVACUATE(二分答案,最大流)
  2. JWT机制了解
  3. Mysql储存过程8:repeat循环
  4. Why does OpenCV use BGR color format ?【转】
  5. 用户空间与内核空间数据交换的方式(9)------netlink【转】
  6. 64_r3
  7. URAL题解二
  8. iOS通知中心
  9. 初探Nginx架构
  10. python3环境下面bytes类型转换成字典类型实例