当前位置: 首页 > news >正文

1. 小游戏(贪心)

   题干:

        谷同学很喜欢玩计算机游戏,特别是战略游戏,但是有时他不能尽快找到解所以常常感到很沮丧。现在面临如下问题:他必须在一个中世纪的城堡里设防,城堡里的道路形成一棵无向树。要在结点上安排最少的士兵使得他们可以看到所有边。你能帮助他吗?

        你的任务是给出士兵的最少数目。

        输入:包含多组数据。每组数据表示一棵树,在每组数据中:

        第一行是结点的数目。

        接下来的几行,每行按如下格式描述一个结点:结点标识符 : ( 道路的数目 ) 结点标识符1  结点标识符2  ......  结点标识符道路的数目

        或者

        结点标识符 : (0)

        对于 n (0<n<=1500) 个结点,结点标识符是一个从 0 到 n - 1 的整数。每条边在测试用例中只出现一次。

        对于每组数据,各给出一个整数表示士兵的最少数目。

测试输入期待的输出时间限制内存限制额外进程
测试用例 1以文本方式显示
  1. 4↵
  2. 0:(1) 1↵
  3. 1:(2) 2 3↵
  4. 2:(0)↵
  5. 3:(0)↵
  6. 5↵
  7. 3:(3) 1 4 2↵
  8. 1:(1) 0↵
  9. 2:(0)↵
  10. 0:(0)↵
  11. 4:(0)↵
以文本方式显示
  1. 1↵
  2. 2↵
1秒64M0

 

代码如下:

        这里和小学期的知识对应起来了。(动态规划dp[n][2]的设计)

#include <iostream>
#include <cstring>
using namespace std;const int MAXN = 1505;
int dp[MAXN][2], visited[MAXN], link[MAXN][MAXN];
void DFS(int root)
{visited[root] = 1;for (int i = 0; link[root][i] != -1; ++i){int m = link[root][i];if (!visited[m]){DFS(m);dp[root][1] += dp[m][0];dp[root][0] += min(dp[m][0], dp[m][1]);}}dp[root][0]++;
}
int main()
{int n;while (scanf("%d", &n) != EOF){memset(dp, 0, sizeof(dp));memset(visited, 0, sizeof(visited));memset(link, 0, sizeof(link));int node, next, temp, root;for (int i = 0; i < n; i++){scanf("%d:(%d)", &node, &next);root = (!i) ? node : root;int j = 0;for (; j < next; ++j){cin >> temp;link[node][j] = temp;}link[node][j] = -1;}DFS(root);cout << min(dp[root][0], dp[root][1]) << endl;}return 0;
}

相关文章:

  • RabbitMQ 的七种消息传递形式
  • python-单词本|通讯录
  • C语言面试之旅:掌握基础,探索深度(面试实战之ARM架构一)
  • Android : ViewModel+LiveData observe观察数据 改变内容简单应用
  • Raspberry Pi 2, 2 of n - Pi 作为 IoT 消息代理
  • PostgreSQL 连接更新操作
  • UE4/UE5 材质实现带框圆环
  • 快速搞懂蔚来的换电模式 是新能源车的未来吗
  • Vue2虚拟列表,umy-ui封装
  • 计算机网络之IP篇
  • 生产实践:Redis与Mysql的数据强一致性方案
  • springboot 整合 Spring Security 上篇
  • Dockerfile脚本编写流程及示例
  • 零信任组件和实施
  • RK3288升级WebView版本,替换webview app
  • 30天自制操作系统-2
  • angular学习第一篇-----环境搭建
  • Java多线程(4):使用线程池执行定时任务
  • JSDuck 与 AngularJS 融合技巧
  • leetcode386. Lexicographical Numbers
  • LintCode 31. partitionArray 数组划分
  • Linux后台研发超实用命令总结
  • Lucene解析 - 基本概念
  • MQ框架的比较
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • SpriteKit 技巧之添加背景图片
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 彻底搞懂浏览器Event-loop
  • 高程读书笔记 第六章 面向对象程序设计
  • 日剧·日综资源集合(建议收藏)
  • 入手阿里云新服务器的部署NODE
  • 线性表及其算法(java实现)
  • 最简单的无缝轮播
  • 交换综合实验一
  • 组复制官方翻译九、Group Replication Technical Details
  • #NOIP 2014# day.2 T2 寻找道路
  • #单片机(TB6600驱动42步进电机)
  • (2020)Java后端开发----(面试题和笔试题)
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (六)vue-router+UI组件库
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (五)MySQL的备份及恢复
  • (转)fock函数详解
  • ***监测系统的构建(chkrootkit )
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NET是什么
  • .ui文件相关
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • [C++] sqlite3_get_table 的使用
  • [C++]类和对象(中)