这个题bzoj上没有图,luogu上样例有问题。。。其实这个题代码不难,但是思考起来还是有一定难度的,其实这些题的重点都在于思考。我就不写了,洛谷上唯一的题解写的挺好,大家可以看一看。

题干:

在dos系统诞生以前,美国曾研究出一种类似的操作系统,名为Tinux系统。但由于硬件设施的制约,Tinux系统有许多的缺点。下面就对Tinux系统作一个简单的介绍:

Tinux系统是Tiger博士为美国军方研制开发的一种操作系统,该系统对文件的存储方式类似于dos系统,像一棵树一样,每一个叶子节点表示一个文件,每一个非叶子节点表示一个目录。其中定义i级子目录表示从根目录开始访问,一直访问到该子目录(不包括该子目录)需要访问的目录的个数为i的目录,所以根目录下的目录为一级子目录,其他的目录以此类推。但是在同一子目录下,受到硬件的制约Tinux系统最多只能够存储k个文件或子目录,也就是说这棵树里面的每一个非叶子节点最多只有k个子节点。这样就导致在文件数量较多的情况下,访问存储在该系统当中的文件A,往往要先访问一系列的子目录,我们称这些子目录为文件A的上级目录。例如下面这一个例子:

Root  A1

 A2

 A3

 A4

 A4A1

 A4A2

 A4A2A1

 A4A2A2

 A4A3

当我们要访问文件A4A2A1时就必须先访问它的上级目录:一级子目录A4和二级子目录A4A2。

Tinux系统在存储文件时,给每一个子目录都分配了k个指针,分别指向存放在该目录下的每一个文件和每一个目录,因此对文件的访问实质上就是对指针的访问。但是由于硬件原因,这k个指针不尽相同,因此访问它们的时间也不同,访问第i个指针所耗费的时间为 。但是对于两个不同的子目录(不管它们各自属于哪一级目录)而言它们各自所拥有的k个指针是相同的。

Tinux系统最大的缺点是访问一个目录时,必须把该目录下所有的文件读入到内存当中来,这些文件包括在其各级子目录当中的文件,例如上面那一个例子,访问A4那一个目录,就必须把A4A1,A4A2A1,A4A2A2,A4A3这四个文件都读入到内存当中来,访问一个目录所需要的时间为 (x表示该目录及其各级子目录下文件的个数, 表示指向该目录的指针的访问时间)。因此根据上面介绍的访问方法,单独访问一个文件所需要的总时间为访问其所有上级目录(不包括根目录)所需要的时间与访问指向该文件的指针所需要的时间的和,例如上面那一个例子,访问文件A4A2A1需要的时间=访问目录A4的时间+访问目录A4A2的时间+访问指向文件A4A2A1的指针需要的时间。

现在,tiger博士准备将n个文件存储到一个空的Tinux系统当中,希望你帮助他设计一个程序找到一种最优的存储方法,使得单独访问这n个文件所需要的时间总和最小。

输入输出格式

输入格式:

输入由文件”system.in”读入。

文件的第一行为两个正整数 , ,接下来的k行每行有一个正整数 。

输出格式:

输出到文件”system.out”,输出文件仅有一个正整数,表示在最优存储方案下,单独访问这n个文件所需要的时间总和。(结果小于2的31次方 )

输入输出样例

输入样例#1: 复制

4 3
3
5
4
4

输出样例#1: 复制

28

说明

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
#define duke(i,a,n) for(int i = a;i <= n;i++)
#define lv(i,a,n) for(int i = a;i >= n;i--)
#define clean(a) memset(a,0,sizeof(a))
const int INF = 1 << 30;
typedef long long ll;
typedef double db;
template <class T>
void read(T &x)
{char c;bool op = 0;while(c = getchar(), c < '0' || c > '9')if(c == '-') op = 1;x = c - '0';while(c = getchar(), c >= '0' && c <= '9')x = x * 10 + c - '0';if(op) x = -x;
}
template <class T>
void write(T x)
{if(x < 0) putchar('-'), x = -x;if(x >= 10) write(x / 10);putchar('0' + x % 10);
}
int f[1700][1700];
int n,k,p[1700];
int MIN(int x,int y)
{if(!x)return y;elsereturn min(x,y);
}
int dp(int x,int y,int l)
{if(x == 1){f[x][y] = p[y];return f[x][y];}if(y == k){f[x][y] = p[y] * x * x + dp(x,1,x - 1);return f[x][y];}int tmp = k - y + 1;if(tmp * l < x)return INF;if(f[x][y]) return f[x][y];tmp = (x - 1) / tmp + 1;duke(i,tmp,l){if(i == 1)f[x][y] = p[y] + dp(x - 1,y + 1,x - 2);elsef[x][y] = MIN(f[x][y],dp(x - i,y + 1,x - i - 1) + dp(i,1,i - 1) + p[y] * i * i);}return f[x][y];
}
int main()
{read(n);read(k);duke(i,1,k)read(p[i]);sort(p + 1,p + k + 1);printf("%d\n",dp(n,1,n - 1));return 0;
}

转载于:https://www.cnblogs.com/DukeLv/p/9726549.html

B1277 [HNOI2002]Tinux系统 树形dp相关推荐

  1. [树形dp] Jzoj P3914 人品问题

    Description 网上出现了一种高科技产品--人品测试器.只要你把你的真实姓名输入进去,系统将自动输出你的人品指数.yzx不相信自己的人品为0.经过了许多研究后,yzx得出了一个更为科学的人品计 ...

  2. BZOJ1063:道路设计(树形dp)

    1063: [Noi2008]道路设计 Time Limit: 20 Sec   Memory Limit: 162 MB Submit: 1147   Solved: 619 [ Submit][ ...

  3. 动态规划报告(树形DP+概率DP

    动态规划报告 树形dp 树形 DP,即在树上进行的 DP.由于树固有的递归性质,树形 DP 一般都是递归进行的.一般需要在遍历树的同时维护所需的信息 以一道题目为例 2022CCPC桂林站G Grou ...

  4. 人品问题(树形DP)

    题目描述 网上出现了一种高科技产品--人品测试器.只要你把你的真实姓名输入进去,系统将自动输出你的人品指数.把儿不相信自己的人品为0.经过了许多研究后,把儿得出了一个更为科学的人品计算方法.这种方法的 ...

  5. BNUOJ 52305 Around the World 树形dp

    题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...

  6. [树形dp] Jzoj P5233 概率博弈

    Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值.假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列. 一开始在1号点有 ...

  7. fwt优化+树形DP HDU 5909

    1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...

  8. BZOJ 1040 ZJOI2008 骑士 树形DP

    题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...

  9. POJ 3342 树形DP+Hash

    这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了. 今天我又重新捡了起来.(哈哈1A了) 题意: 没有上司的舞会+判重 思路: hash一下+树形DP 题目中给的人名hash到数字,再进行运算 ...

最新文章

  1. SIFT 特征检测及匹配
  2. 笔记:2016-06-03
  3. 继爆款超级账本后,IBM再次推出新产品
  4. 在校园里捉到一只小鸟,怎么办?
  5. 【Google Play】从 Android 应用中跳转到 Google Play 中 ( 跳转代码示例 | Google Play 页面的链接格式 | Google Play 免安装体验 )
  6. 计算机组装与维修说课稿,大班《生活中的数字》说课稿
  7. 学习笔记--2014年7月7日
  8. Docker快速部署PostgreSQL服务
  9. irc ubuntu_让我们聊聊写作:在IRC上加入我们
  10. 能在市场上大概率赚钱的人类型
  11. 菜鸟的学习之路(13) —TreeSet类的排序
  12. 将SPS中被FrontPage修改过的页面重置为Ghost Page
  13. Forms Based Authentication FBA by AD in SharePoint 2010
  14. 单应性(同义词直射变换、射影变换和射影性等)(来自wiki)
  15. 20200715每日一句
  16. 北邮数电 爱课堂答案 Verilog专题
  17. 批处理使用技巧:批量修改文件名
  18. 不要用PS啦,python+opencv代码给证件照换底色
  19. Java数组实现进制转换
  20. 前端对接身份证阅读器/标签打印机/扫码枪记录

热门文章

  1. JS根据日期比较显示时分或者月日
  2. elasticsearch aggregation的入门案例
  3. 深究AngularJS——ui-router详解
  4. 考研专业课计算机网络调剂,计算机网络信息中心2019年硕士研究生接收调剂信息公告...
  5. python定位文件位置_python使用相对定位,绝对定位,选取同级别文件下的指定文件(csv,excel)...
  6. 99%网工都会遇到的10道经典面试问题
  7. 华为mate20 android,华为MateRS对比华为mate20RS,终于让安卓手机坐上了头等舱!
  8. 函数计算自动化运维实战1 -- 定时任务
  9. datatables 一行数据生成两行_一行代码搞定分组回归
  10. 在上位计算机控制时不能将s7-200,PLC控制统编程题库.doc