Post Office

Post Office poj-1160

    题目大意:给你在数轴上的n个村庄,建立m个邮局,使得每一个村庄距离它最近的邮局的距离和最小,求距离最小和。

    注释:n<=300,m<=min(n,30)

      想法:一道DP题,超级有趣。变强中的我查了题解。是这样的:我们定义两个数组,分别是dp和sum。

        dp[i][j]表示从第一个村庄到第i个村庄建立j个邮局的最小和。

        sum[i][j]表示从第i个村庄到第j个村庄建立一个邮局的最小代价。

      然后,我们发现sum数组是可以预处理出来的。对于sum[i][j]来说,建立的邮局一定是i和j中间的那一个地方。可能是一个村庄,也可能是两个村庄之间。如果是两个村庄之间,显然对于sum[i][j]来说是没有影响的,但是对于sum[i][j+1]来说越靠近j+1越小,这是一定的,所以,我们可以非常简单的总结出sum[i][j]=sum[i][j-1]+pos[i]-pos[(i+j)/2]。这样,我们预处理出了sum数组,最重要的,我们期望处理dp数组。有了sum数组,我们对于dp[i][j]来讲可以枚举断点k,使得k+1到j只建立一个邮局,这样,我们就处理出了dp数组。

    最后,附上丑陋的代码... ...

 1 #include <iostream>
 2 #include <cstdio>
 3 #define N 310
 4 using namespace std;
 5 int sum[N][N],dp[N][N],pos[N];
 6 int main()
 7 {
 8     int n,m;
 9     while(~scanf("%d%d",&n,&m))
10     {
11         memset(sum,0,sizeof(sum));
12         for(int i=1;i<=n;i++)
13         {
14             scanf("%d",&pos[i]);
15         }
16         for(int i=1;i<=n;i++)
17         {
18             for(int j=i+1;j<=n;j++)
19             {
20                 sum[i][j]=sum[i][j-1]+pos[j]-pos[(i+j)/2];
21             }
22         }
23         memset(dp,0x3f,sizeof(dp));
24         for(int i=1;i<=n;i++)
25         {
26             dp[i][1]=sum[1][i];
27         }
28         for(int j=2;j<=m;j++)//如果j=1的话是sum的事情,和dp数组无关
29         {
30             for(int i=j+1;i<=n;i++)//枚举dp的左端点
31             {
32                 for(int k=j-1;k<i;k++)//枚举断点 显然断点是有范围的
33                 {
34                        dp[i][j]=min(dp[i][j],dp[k][j-1]+sum[k+1][i]);
35                 }
36             }
37         }
38         printf("%d\n",dp[n][m]);
39     }
40     return 0;
41 }

    小结:类似于RMQ的思想,我们必须将小范围的枚举在外面,因为之后会用到。在这里,我倒是有一个想法,就是卡内存。因为我们发现,我所用到的dp数组只有刚刚更新过的和正在更新的,所以,我们可以将dp数组的内存除以(n/2),这显然是极好的... ...

原文地址:https://www.cnblogs.com/ShuraK/p/8372614.html

时间: 2024-11-09 10:04:19

Post Office的相关文章

Office远程代码执行漏洞CVE-2017-0199复现

在刚刚结束的BlackHat2017黑帽大会上,最佳客户端安全漏洞奖颁给了CVE-2017-0199漏洞,这个漏洞是Office系列办公软件中的一个逻辑漏洞,和常规的内存破坏型漏洞不同,这类漏洞无需复杂的利用手法,直接就可以在office文档中运行任意的恶意脚本,使用起来稳定可靠,故而非常适合于漏洞学习新手测试调试使用,作为一个已经测试过该漏洞的新手,现将搭建环境和测试的全部过程呈献给大家,希望能对大家的学习有所帮助. CVE-2017-0199实际上包含两个漏洞,其中一个称为"RTF URL

如何用代码读取Office Online Server2016的文档的备注信息

前言 在一个项目上客户要求读取office online server 2016的对文档的备注信息,如下图: 以前思路老纠结在OOS这个在线上,总有以为这个信息存储在某个列表中,其实错了,这个备注信息其实就是word文档的备注信息,微软采用openxml开发的OOS,因此我也采用openxml读取备注信息的思路进行尝试,结果发现原来是可以的,成功效果图如下: 注意: OpenXml格式只有office2007以及以上版本才支持的格式,如果office97-2003格式的文档是二进制格式的文档,o

office如何去除多页签

写文档会遇到同时打开多个文档,偶尔可能需要对比,而有时office会出现跟浏览器类似的多页签界面.如何去除多页签,office本身没有此加载项,一般都是作为插件或组件形式另外安装,导致我们不知道从哪里设置.不废话,上图: 1.文件 2.选项 3.加载项 4.转到... 5.从可用加载项中找到“document tab”项,去掉前边的勾选项即可.

易宝典文章——玩转Office 365中的Exchange Online服务 之三十 体验全新的Office 365管理中心

Office 365管理中心即将改版,微软推出了全新的Office 365管理中,其风格和Windows 10风格匹配.接下来将展示一下关于全新的管理中心,以便先睹为快.一.主页和服务状态监视在主页中显示Modern风格的按钮,默认有"用户"."账单"."服务运行状态"等常用功能.特别是对于"服务运行状况",如果是绿色,则表示所有O365的服务运行正常,如果非绿色,可以可能有服务运行问题,可以直接点击"查看服务运行状

Atitit.office&#160;word&#160;&#160;excel&#160;&#160;ppt&#160;pdf&#160;的web在线预览方案与html转换方案&#160;attilax&#160;总结

Atitit.office word  excel  ppt pdf 的web在线预览方案与html转换方案 attilax 总结 1. office word  excel pdf 的web预览要求1 1.1. 显示效果要好1 1.2. 可以自定义显示界面1 1.3. 不需要控件,兼容性好1 1.4. 支持编辑操作1 2. 纯html预览解决之道(自由的格式)1 3. 转换swf flash方案2 4. 转换pdf方式..更多的浏览器已经直接支持pdf格式查看2 5. 控件方式2 6. Hyb

使用Search查询Office 365 Groups

原文地址 我已经使用新的Office 365 Groups 功能有一段时间了,我想看看我在普通的SharePoint Online site怎么使用它们.我今天的例子里,我创建了两个 public groups 和三个private groups. 我第一个想法是使用Search. 因为我知道,group在后台,是由site collection来存储的.我只是要查找到,它使用的是哪一个WebTemplate .你可以在search中,通过查看一个文档,容易的找到site collection的

微软职位内部推荐-Sr. SE - Office incubation

微软近期Open的职位: Senior Software Engineer-Office Incubation Office China team is looking for experienced engineers to improve consumer experience in China. Office has great products and features that are loved by users worldwide. We are looking for self-

Office word 2013中直接调用MathType的方法

Office word 2013中直接调用MathType的方法 | 浏览:4403 | 更新:2014-02-20 14:45 | 标签: word 使用Office word 2013的用户肯定早已注意到在编辑文档时MathType无法直接调用,但是点击文档中的公式时能够跳出MathType的公式编辑窗口.其实,这一问题可以通过简单设置让 MathType 集成到Office Word 2013中. 工具/原料 Office word 2013软件.MathType软件 方法步骤 安装Mat

Office 365 - SharePoint 2013 Online之应用程序开发工具

1.新建一个网站集,模板选择开发人员模板,如下图: 2.确定以后,需要稍等一会儿; 3.点击网站内容,添加app,如下图: 4.进入SharePoint Store,选择Napa,如下图: 5.选择ADD IT,如下图: 6.可能需要登录,如果没有微软账号,可以注册一个,如下图: 7.点击继续,如下图: 8.Return to site,如下图: 9.点击信任他,如下图: 10.稍等片刻,就添加成功了,如下图: 11.点击进入Napa,可以在这里创建app,如下图: 总 结 试用了一下Napa,

启用和配置Office 365多重身份验证

有朋友问我,Office 365的账户安全性如何?如果别人知道我的账号和密码,那不就随时可以访问我的Office 365.其实Office 365里面有个多重身份验证. 什么是多重身份验证,以及它是如何工作的? 多重身份验证 (MFA) 或双重身份验证 (2FA) 是一种身份验证方法,该方法需要使用多种验证方式,并可为用户登录和交易添加另一道关键保护屏障. 该方法需要使用下列验证方式中的任意两种或更多种来发挥作用: 您知道的信息(通常为密码) 您拥有的东西(不易被复制的受信任设备,如电话) 您的