POJ1723,1050,HDU4864题解(贪心)
POJ1723 Soldiers
思维题。
考虑y坐标,简单的货舱选址问题,选择中位数即可。
再考虑x坐标,由于直接研究布置方法非常困难,可以倒着想:不管如何移动,最后的坐标总是相邻的,且根据贪心的思路,站队前后士兵的相对位置应该不变。那么记\(pos\)为最后水平线起点的前一位置,则有\(x_1-1=pos,x_2-2=pos,...,x_n-n=pos\),所以答案为\(\sum_{i=1}^{n}|(x_i-i)-k|\),这样就又变成了一道中位数的题目。
不放代码了。
POJ1050 To the Max
贪心(其实严格来讲是一道DP题
求最大子矩阵之和,考虑将它转化为最大子段和问题,我们可以对于每一列枚举所有的\(i,j\)(即加起来不同的情况),然后这样把每一列变成一个数,拿做最大字段和的方法来求解即可。
复杂度\(O(n^3)\)。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,a[105][105],t[105],sum,ans=-0x3f3f3f3f;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
scanf("%d",&a[i][j]);
for(int i=1;i<=n;++i)
{
memset(t,0,sizeof(t));
for(int j=i;j<=n;++j)
{
sum=0;
for(int k=1;k<=n;++k)
{
sum+=t[k]+=a[j][k]; //注意这里先枚举j再枚举k,所以此时t[k]已经包含之前算过的值了(考虑前缀和
ans=max(ans,sum);
if(sum<0) sum=0;
}
}
}
printf("%d",ans);
return 0;
}
HDU4864 Task
其实这题应该思考一下就能想出来了……(才怪
考虑x与y对利润的贡献,可以发现题目的数据范围保证了贪心算法的正确性——x远大于y对利润的贡献,所以考虑对任务按x从大到小排序,对每个任务选出满足条件且y值最小的机器。
证明的话……一般不会说显然就完事了,不过也可以明天上课的时候推一下
#include <cstdio>
#include <set>
#include <algorithm>
using namespace std;
int n,m,cnt;
long long ans;
struct P{int x,y;}a[100005],b[100005];
multiset<int> s;
bool cmp(P x,P y) {return x.x==y.x?x.y<y.y:x.x<y.x;}
int main()
{
while(~scanf("%d%d",&n,&m))
{
s.clear(); cnt=ans=0;
for(int i=1;i<=n;++i) scanf("%d%d",&a[i].x,&a[i].y);
for(int i=1;i<=m;++i) scanf("%d%d",&b[i].x,&b[i].y);
sort(a+1,a+n+1,cmp); sort(b+1,b+m+1,cmp);
for(int i=m,j=n;i;--i)
{
while(j && a[j].x>=b[i].x) s.insert(a[j--].y);
multiset<int>::iterator it=s.lower_bound(b[i].y);
if(it!=s.end())
{
cnt++; ans+=b[i].x*500+b[i].y*2;
s.erase(it);
}
}
printf("%d %lld\n",cnt,ans);
}
return 0;
}
继续加油啊……
POJ1723,1050,HDU4864题解(贪心)的更多相关文章
- [HDU4864]Task (贪心)
此图和上一篇博客的图一起看有奇效 题意 https://vjudge.net/problem/HDU-4864 思路 贪心 代码 by lyd 我实在是敲不来 #include <iostrea ...
- 洛谷P2460 [SDOI2007]科比的比赛(题解)(贪心+搜索)
科比的比赛(题解)(贪心+搜索) 标签:算法--贪心 阅读体验:https://zybuluo.com/Junlier/note/1301158 贪心+搜索 洛谷题目:P2460 [SDOI2007] ...
- hdu4864 hdu4268 贪心 lower_bound
hdu4864 题意: 有n个机器,m个任务,n,m<=100000,每个机器都有工作时间的最大限制xi(0<xi<1440)和完成的最大难度yi(0<=yi<=100) ...
- --hdu 1050 Moving Tables(贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1050 AC code: #include<stdio.h> #include<str ...
- PAT甲级1007题解——贪心
题目分析:对于每一个点来说,如果选择合并入包含前一个点的序列那么只有在前一个点的序列不为负数(这里指的是包含前一个位置的数的一个连续序列的和不为负数),当前点才会将自己也加入这个子序列,否则,当前点则 ...
- CF336C-Vasily the Bear and Sequence题解--贪心
题目链接 https://www.luogu.org/problemnew/show/CF336C 分析 一个比较妙的贪心 我们要让最后\(and\)起来的数被\(2^k\)整除且\(k\)最大,我们 ...
- Codeforces 515C 题解(贪心+数论)(思维题)
题面 传送门:http://codeforces.com/problemset/problem/515/C Drazil is playing a math game with Varda. Let’ ...
- 洛谷P2672 推销员 题解 贪心
题目链接:https://www.luogu.org/problem/P2672 这道题目是贪心,贪心的思想是: 选择 \(m\) 户人家的最大疲劳值应该是以下两种方案中的较大值: 方案一:选择 \( ...
- hdu 1050 Moving Tables_贪心
题意:你搬n个桌子,桌子从一个地方搬到另一个地方,走廊只允许同时一个桌子通过,教室分布在两边,奇数在一边,偶数在一边,当桌子不冲突时可以同时搬运,冲突时要等别的那个桌子搬完再搬. 思路:因为奇数桌子在 ...
随机推荐
- 用java实现图书管理系统。
图书管理系统. 一.项目设计到的知识 1.MVC设计模式思想(分包) >项目分包 >MVC简单介绍 2.GUI(图形化界面) 3.JDBC连接MySql数据库 4.I/O流 5.面向对象思 ...
- 菜鸟刷题路:剑指 Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的 ...
- 三、DNS子域授权
前提:准备两台虚拟机:父域: www.tedu.cn(虚拟机A)子域:www.bj.tedu.cn(虚拟机B) 一.在两台虚拟机上安装域名解析软件 root@pc207 ~]# yum -y inst ...
- 12:media配置以及后端指定资源暴露
django需要用到的静态文件默认都是放在static目录下 而针对后期用户上传的静态文件也应该统一存储 # media配置:规定用户上传的静态文件存储位置 MEDIA_ROOT = os.path. ...
- 约会Rendezvous
约会 Rendezvous 内存限制:128 MiB 时间限制:1000 ms 标准输入输出 题目描述 给定一个有 nnn 个顶点的有向图,每个顶点有且仅有一条出边.每次询问给出两个顶点 ai ...
- 大数据初级sy
1.spark 是用以下哪种编程语言实现的? A.C B C++ C JAVA D.Scala (正确答案) 2.FusionIn ...
- MAT工具定位分析Java堆内存泄漏问题方法
一.MAT概述与安装 MAT,全称Memory Analysis Tools,是一款分析Java堆内存的工具,可以快速定位到堆内泄漏问题.该工具提供了两种使用方式,一种是插件版,可以安装到Eclips ...
- Spring学习日记01_IOC_xml的三种注入方式
什么是IOC 控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 使用IOC目的:为了耦合度降低 做入门案例就是IOC实现 IOC底层原理 xml解析 工厂模式 反射 原始方式 cla ...
- 解决Git操作报错
情况一: 当我拉取的代码是最新的时候,git pull是可以正常的拉取的,但是却不可以提交,报错如下图: 情况二: 如果我目前不是最新的版本,需要git pull,此时拉取就会失败,报错如下图: 出现 ...
- EXCEL根据某一列单元格特定标点符号分行,其它列内容一致
注意事项:此方法注意运用excel空值单元格填充,因此数据处理之前,如果存在值为空的,请特殊处理,后期处理完再替换为原来的空值 1.在决定分行数的列后插入一列 2.根据逗号之前值最多的数量来决定分行数 ...