BSOJ 1480 贪吃的九头龙

NOI原题,下了数据,都过了。但是OJ现在挂了。。。

首先,脑袋的数量都是唬人的。如果至少3个脑袋的话,完全可以做到不让两个小头在一起(不过当只有2个头的时候得特别考虑)。

所以我们就把状态设计成F[i][j][k]是以i为根的树里有j个大头吃的果子(k=1时i被大头吃,0时被小头吃)。转移方程很好像,看程序就好了。

我没有转化成二叉树做,其实本质上来说还是树形依赖背包嘛,只不过要讨论父亲节点和儿子节点被那个脑袋吃而已。

//By YY_More
#include<cstdio>
#include<algorithm>
using namespace std;
const int INF=0x7fffffff;
struct edge{int point;int data;edge *next;
};
bool ed[301];
edge *g[301];
int F[2][301][301],num[301],N,M,K,a,b,c;
void insert(int from,int to,int value){edge *p=new edge;(*p).data=value;(*p).point=to;(*p).next=g[from];g[from]=p;
}
void cal(int x){ed[x]=true;edge *p=g[x];num[x]=1;while (p!=NULL){if (!ed[(*p).point]){cal((*p).point);num[x]+=num[(*p).point];}   p=(*p).next;}
}
void DP(int x){ed[x]=false;int now=0,son;F[1][x][0]=0;F[0][x][0]=0;edge *p=g[x];while (p!=NULL){if (ed[(*p).point]){DP((*p).point);son=(*p).point;now=min(now,K);for (int i=now;i>=0;i--){if (i+num[son]<=K){F[1][x][i+num[son]]=min(F[1][x][i+num[son]],F[1][x][i]+F[1][son][num[son]]+(*p).data);F[0][x][i+num[son]]=min(F[0][x][i+num[son]],F[0][x][i]+F[1][son][num[son]]);} for (int j=min(K-i,num[son]-1);j>0;j--){F[1][x][i+j]=min(F[1][x][i+j],F[1][x][i]+min(F[0][son][j],F[1][son][j]+(*p).data));F[0][x][i+j]=min(F[0][x][i+j],F[0][x][i]+min(F[1][son][j],F[0][son][j]+(M==2?(*p).data:0)));}F[1][x][i]=F[1][x][i]+F[0][son][0];F[0][x][i]=F[0][x][i]+F[0][son][0]+(M==2?(*p).data:0);}   now+=min(K,num[son]);}p=(*p).next;}for (int i=num[x];i>0;i--) F[1][x][i]=F[1][x][i-1];
}
int main(){scanf("%d%d%d",&N,&M,&K);for (int i=2;i<=N;i++){scanf("%d%d%d",&a,&b,&c);insert(a,b,c);insert(b,a,c);}if (K+M-1>N){printf("%d\n",-1);return 0;} cal(1);     fill(&F[0][0][0],&F[1][N][K]+1,INF);DP(1);printf("%d\n",F[1][1][K]);return 0;
}

posted on 2011-07-09 11:23 YY_More 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/yymore/archive/2011/07/09/2101686.html

BSOJ 1480 贪吃的九头龙相关推荐

  1. NOI2002 贪吃的九头龙

    P2940 贪吃的九头龙 时间: 1000ms / 空间: 65536KiB / Java类名: Main 描述 贪吃的九头龙(dragon.pas/c/cpp) [问题描述] 传说中的九头龙是一种特 ...

  2. vijos 1523 贪吃的九头龙

    http://www.elijahqi.win/archives/1191 背景 安徽省芜湖市第二十七中学测试题 NOI 2002 贪吃的九头龙(dragon) Description:Officia ...

  3. 【NOI2002】贪吃的九头龙

    Description 传说中的九头龙是一种特别贪吃的动物.虽然名字叫"九头龙",但这只是说它出生的时候有九个头,而在成长的过程中,它有时会长出很多的新头,头的总数会远大于九,当然 ...

  4. codevs贪吃的九头龙

    传说中的九头龙是一种特别贪吃的动物.虽然名字叫"九头龙",但这只是说它出生的时候有九个头,而在成长的过程中,它有时会长出很多的新头,头的总数会远大于九,当然也会有旧头因衰老而自己脱 ...

  5. codevs1746 贪吃的九头龙

    [问题描述] 传说中的九头龙是一种特别贪吃的动物.虽然名字叫"九头龙",但这只是说它出生的时候有九个头,而在成长的过程中,它有时会长出很多的新头,头的总数会远大于九,当然也会有旧头 ...

  6. “九头虫”病毒技术分析报告

    2019独角兽企业重金招聘Python工程师标准>>> ##一.背景介绍 近日,阿里移动安全收到多方用户反馈,手机中了一种难以清除的病毒.病毒一旦发作,设备将不断弹出广告,并自动下载 ...

  7. Medusa(美杜莎)和Hydra(九头蛇)快速入门手册:01

    今天主要是初步介绍一些Hydra和Medusa的分析和内容,旨在方便快速入门,这是第一部分Medusa,后面附带一些字典,之所以是写一起,我是觉得这两个都是不错的工具,不应该分开的,在这种思想下就汇总 ...

  8. 九头身美女_百度百科

    九头身美女_百度百科 九头身美女

  9. 密码爆破工具——九头蛇(hydra)

    九头蛇hydra 记得美国队长中的大反派hydra(九头蛇)组织吗? 今天介绍的这款渗透测试工具,也叫这个名字.​ hydra是著名组织thc的一款开源的暴力破解密码工具,功能非常强大 kali下是默 ...

最新文章

  1. 大数据竞赛平台——Kaggle 入门篇
  2. Aop和Filter区别
  3. andriod 开发记录apidemos 错误解决
  4. LeetCode动态规划 环形子数组的最大和
  5. java上机面试题 039_深入 Java 虚拟机之面试总结篇
  6. 国家可持续发展议程创新示范区创建工作推进会在北京召开
  7. [POJ1733]Parity game(并查集 + 离散化)
  8. 部分 I. 教程_第 2 章 SQL语言_2.2. 概念
  9. mysql round 四舍五入_MySQL之ROUND函数四舍五入的陷阱
  10. 【QT】QT从零入门教程(一):图像处理自编软件
  11. 为什么普通红包自己不能领_腾讯为推广新游王牌战士而豪撒千金?快去看看你能不能领红包...
  12. 怎么多快好省地学习中文自然语言处理
  13. java经典实例 源代码_100个Java经典编程实例源代码JAVA源码下载
  14. Unity3D脚本语言的类型系统
  15. 开源阅读书源_强力推荐一个开源阅读软件
  16. OTDR光时域反射仪测试参数设置
  17. 【总结】从0到1的项目经历
  18. 多项式定理 matlab,泊松定理卡方分布及多项式拟合的MATLAB实现.pdf
  19. android获取imei需要read_phone_state吗,Firemonkey android read_phone_state运行时权限要求获取IMEI...
  20. closing entry怎么做_牛排三分熟怎么说?刀叉如何摆放?来看看这些西餐知识你知道多少?另有热门院校大盘点...

热门文章

  1. EXCEL常用操作-----排序
  2. 【Python】Pandas的一系列经典操作(非常实用)
  3. PCB设计---叠层、布局、布线
  4. 京东淘宝始料未及,小程序将是未来首选购物渠道
  5. python微服务 企业管理_Python写的微服务如何融入Spring Cloud体系?
  6. 公交车蕴含的软件开发思想
  7. 问题 H: 交换变量
  8. static 和 new对象的区别
  9. Java 常见编译错误信息
  10. Git 本地分支与远程分支关联(git branch --set-upstream-to=origin/<branch> lcn )