Starship Troopers

简介: HDU的一道常规动态规划题目。 题目重述: 每个队员都能够对付20只虫子,但是如果有21只虫子,你也得出2个人来对付。输入数据中,先是N(N

HDU的一道常规动态规划题目。

题目重述:

每个队员都能够对付20只虫子,但是如果有21只虫子,你也得出2个人来对付。输入数据中,先是N(N <= 100)个洞穴,然后再是M(M <= 100)个队员。然后输入N个洞穴的信息,包括有多少只虫子,其中存在Boss的概率是多少。然后再是洞穴的联通情况,双向连通。在处理保存虫子的数组时实际上是耗费队员的数组 bug[i] = (bug[i] + 19)/20; 。

转移方程:

通过DFS进行遍历,转移方程为 dp[当前洞穴][耗费人数] = max{dp[当前洞穴][耗费人数],dp[当前洞穴][当前洞穴派走了k个人] + dp[子洞穴][派往子洞穴k个人]},这是一道树形DP题。

 

源代码:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<vector>
 5 #define MAXN 105
 6 using namespace std;
 7 int dp[MAXN][MAXN];
 8 int m,n;
 9 int bug[MAXN];
10 int possible[MAXN];
11 vector<int>cavern[MAXN];
12 
13 void DFS(int root, int pos)
14 {
15     for(int i = bug[root]; i <= m; i++)
16         dp[root][i] = possible[root];
17     int tot = (int)cavern[root].size();
18     for(int i = 0; i < tot; i++)
19     {
20         int v = cavern[root][i];
21         if(v == pos)
22             continue;
23         DFS(v, root);
24         for(int j = m; j >= bug[root]; j--)
25             for(int k = 1; k <= j-bug[root]; k++)
26             {
27                 dp[root][j] = max(dp[root][j], dp[root][j-k] + dp[v][k]);
28             }
29     }
30 }
31 
32 int main()
33 {
34     while(~scanf("%d%d", &n, &m) && n != -1 || m != -1)
35     {
36         for(int i = 0; i < n; i++)
37         {
38             scanf("%d%d", &bug[i], &possible[i]);
39             bug[i] = (bug[i] + 19)/20;
40         }
41         for(int i = 0; i < n; i++)
42             cavern[i].clear();
43         for(int i = 0, a, b; i < n-1; i++)
44         {
45             scanf("%d%d", &a, &b);
46             cavern[a-1].push_back(b-1);
47             cavern[b-1].push_back(a-1);
48         }
49         if(m == 0)
50         {
51             printf("0\n");
52             continue;
53         }
54         memset(dp, 0, sizeof(dp));
55         DFS(0, -1);
56         printf("%d\n", dp[0][m]);
57     }
58     return  0;
59 }

 

相关文章
|
算法
HDU-1050,Moving Tables(不用贪心也AC)
HDU-1050,Moving Tables(不用贪心也AC)
干草堆——acwing算法题第二天
干草堆——acwing算法题第二天
干草堆——acwing算法题第二天
|
6天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
17天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1320 7
|
5天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
296 129
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
4天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。
|
16天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1388 87