这段时间在NOI题库上刷了刷题,来写点心得和题解

一、寻找平面上的极大点

2704:寻找平面上的极大点

总时间限制: 
1000ms 
内存限制: 
65536kB
描述
在一个平面上,如果有两个点(x,y),(a,b),如果说(x,y)支配了(a,b),这是指x>=a,y>=b;

用图形来看就是(a,b)坐落在以(x,y)为右上角的一个无限的区域内。

给定n个点的集合,一定存在若干个点,它们不会被集合中的任何一点所支配,这些点叫做极大值点。

编程找出所有的极大点,按照x坐标由小到大,输出极大点的坐标。

本题规定:n不超过100,并且不考虑点的坐标为负数的情况。
输入
输入包括两行,第一行是正整数n,表示是点数,第二行包含n个点的坐标,坐标值都是整数,坐标范围从0到100,输入数据中不存在坐标相同的点。
输出
x轴坐标最小到大的顺序输出所有极大点。

输出格式为:(x1,y1),(x2,y2),...(xk,yk)

注意:输出的每个点之间有","分隔,最后一个点之后没有",",少输出和多输出都会被判错
样例输入
5
1 2 2 2 3 1 2 3 1 4
样例输出
(1,4),(2,3),(3,1)
提示
这个题一看水水的贪心( ⊙ o ⊙ )!于是开心的去刷代码去了。。。
大体思路就是:先读入所有的坐标,然后从大到小排序(此处不排序会使后面的处理无法最优),然后顺序扫描一遍所有的点,然后与当前的极大点进行比较,如果被覆盖就continue,否则加入存极大点的数组,由于之前从大到小排序,所以不会出现什么问题,最后倒序输出就好了O(∩_∩)O~~
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct data{
int x,y;
};
int cmp(data x,data y)
{
if (x.x>y.x)
return 0;
else
if (x.x==y.x)
{
if (x.y>y.y)
return 0;
else
return 1;
}
else
return 1;
}
int cmp1(data x,data y)
{
if (x.x>y.x)
return 1;
else
if (x.x==y.x)
{
if (x.y>y.y)
return 1;
else
return 0;
}
else
return 0;
}
int main()
{
int n;int i,j;
bool f=false;
data d[1000]={0};
data dandan[1000]={0};
int a,b;
int k=0;
scanf("%d",&n);
for (i=1;i<=n;i++)
scanf("%d%d",&dandan[i].x,&dandan[i].y);
sort(dandan+1,dandan+n+1,cmp1);
// for (i=1;i<=n-1;i++)
// cout<<"("<<dandan[i].x<<","<<dandan[i].y<<")"<<",";
// cout<<"("<<dandan[n].x<<","<<dandan[n].y<<")"<<endl;
for (i=1;i<=n;i++)
{
a=dandan[i].x;b=dandan[i].y;
f=false;
for (j=1;j<=k;j++)
if (d[j].x>=a && d[j].y>=b)
{
f=true;
break;
}
if (f)
continue;
else
{
k++;
d[k].x=a;
d[k].y=b;
}
}
sort(d+1,d+k+1,cmp);
for (i=1;i<=k-1;i++)
cout<<"("<<d[i].x<<","<<d[i].y<<")"<<",";
cout<<"("<<d[k].x<<","<<d[k].y<<")";
return 0;
}

由于当时编程时光顾着看旁边的蛋神颓Agar了,分心代码写的有点残。。。


二、电池的寿命
      这个题比刚刚就恶心了点,但是代码也短了,果然是短小啊;-)

2469:电池的寿命

总时间限制: 
1000ms 
内存限制: 
65536kB
描述

小S新买了一个掌上游戏机,这个游戏机由两节5号电池供电。为了保证能够长时间玩游戏,他买了很多5号电池,这些电池的生产商不同,质量也有差异,因而使用寿命也有所不同,有的能使用5个小时,有的可能就只能使用3个小时。显然如果他只有两个电池一个能用5小时一个能用3小时,那么他只能玩3个小时的游戏,有一个电池剩下的电量无法使用,但是如果他有更多的电池,就可以更加充分地利用它们,比如他有三个电池分别能用3、3、5小时,他可以先使用两节能用3个小时的电池,使用半个小时后再把其中一个换成能使用5个小时的电池,两个半小时后再把剩下的一节电池换成刚才换下的电池(那个电池还能用2.5个小时),这样总共就可以使用5.5个小时,没有一点浪费。

现在已知电池的数量和电池能够使用的时间,请你找一种方案使得使用时间尽可能的长。

输入

输入包含多组数据。每组数据包括两行,第一行是一个整数N (2 ≤ N ≤ 1000),表示电池的数目,接下来一行是N个正整数表示电池能使用的时间。

输出

对每组数据输出一行,表示电池能使用的时间,保留到小数点后1位。

样例输入
2
3 5
3
3 3 5
样例输出
3.0
5.5

      大体思路:先计算所有的电池的总量,然后进行比较,如果总量减去最大的那个,比最大的小,就可以用所有小的和最大的打车轮战,来耗最大的电量,这时最大的用电量就是  总和减去最大的值;如果比最大的大,那么用电量就是总量的一半,此处是可以证明的,但就不多提了
  下面看代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
int dc[1100]={0};
int main()
{
int n;
while (scanf("%d",&n)==1)
{
int i;
int sum=0;
double ans=0.0;
//cin>>n;
memset(dc,0,sizeof(dc));
for (i=1;i<=n;i++)
{
scanf("%d",&dc[i]);
sum+=dc[i];
}
sort(dc+1,dc+n+1);
if (sum-dc[n]>dc[n])
ans=sum*1.0/2.0;
else
ans=sum*1.0-dc[n]*1.0;
printf("%0.1f\n",ans);
}
return 0;
}

三、最大子矩阵和

1768:最大子矩阵

总时间限制: 
1000ms 
内存限制: 
65536kB
描述
已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵。



比如,如下4 * 4的矩阵



0 -2 -7 0

9 2 -6 2

-4 1 -4 1

-1 8 0 -2



的最大子矩阵是



9 2

-4 1

-1 8



这个子矩阵的大小是15。
输入
输入是一个N * N的矩阵。输入的第一行给出N (0 < N <= 100)。再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从左到右给出第二行的N个整数……)给出矩阵中的N2个整数,整数之间由空白字符分隔(空格或者空行)。已知矩阵中整数的范围都在[-127, 127]。
输出
输出最大子矩阵的大小。
样例输入
4
0 -2 -7 0 9 2 -6 2
-4 1 -4 1 -1 8 0 -2
样例输出
15

     然而,看到这个题出现在贪心中,其实,其实我是拒绝的,所以我还是用了个DP,因为不会用贪心做他。。。
    然而这个题其实和最大子矩阵和有异曲同工之妙,就是稍稍复杂了些
闲话少说,代码:
#include<iostream>
#include<cstring>
using namespace std;
int a[101][101],b[101];
int dp(int a[],int n)
{ int sum=0,max=0;
for (int i=1; i<=n; i++)
{
sum+=a[i];
if (sum<0)sum=0;
if (sum>max)max=sum;
}
return max;
}
int main()
{
int i,j,n;
cin>>n;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
cin>>a[i][j];
int sum=0,max=0;
for (i=1; i<=n; i++)
for (j=i; j<=n; j++)
{
memset(b,0,sizeof(b));
for (int l=1; l<=n; l++)
for (int k=i; k<=j; k++)
b[l]+=a[k][l];
sum=dp(b,n);
if (max<sum)max=sum;
}
cout<<max<<endl;
return 0;
}

以后还会刷的,顺便提一句,我发现高中时间好紧( ⊙ o ⊙ )啊!不努力不行啊,╮(╯▽╰)╭


NOI题库刷题日志 (贪心篇题解)的更多相关文章

  1. CCF题库刷题编译错误

    最近在CCF上刷题,因为C语言更合适,就使用了devc编译器,选择C语言但是却报编译错误 后来查了一下,发现在提交时选择C++语言就能满分通过,问题得以解决.

  2. PHP实现类似题库抽题效果

    PHP实现类似题库抽题效果 大家好,我顾某人又回来了,最近学了一点PHP,然后就想写个简单小例子试试,于是就写了一个类似于从题库抽题的东西,大概就是先输入需要抽题的数量,然后从数据库中随机抽取题目. ...

  3. 『Python题库 - 填空题』151道Python笔试填空题

    『Python题库 - 填空题』Python笔试填空题 part 1. Python语言概述和Python开发环境配置 part 2. Python语言基本语法元素(变量,基本数据类型, 基础运算) ...

  4. NOI Online 赛前刷题计划

    Day 1 模拟 链接:Day 1  模拟 题单:P1042 乒乓球  字符串 P1015 回文数  高精 + 进制 P1088 火星人  搜索 + 数论 P1604 B进制星球  高精 + 进制 D ...

  5. POJ 水题(刷题)进阶

    转载请注明出处:優YoU http://blog.csdn.net/lyy289065406/article/details/6642573 部分解题报告添加新内容,除了原有的"大致题意&q ...

  6. SQL-数据库刷题

    因是个人总结,只列出对自己有用的或较难的: 下面这道题,第一次拿到,我尝试用 开窗函数 ROW_NUMBER()OVER() 编号,但是发现不能够处理好连续的问题, 上网查找了别人的解法记录下来,其实 ...

  7. SpringMVC云题库错题及答案汇总

    试题分析:D,BeanNameViewResolver:这个视图解析器跟XmlViewResolver基本相同,它是通过把返回的逻辑视图名称去匹配定义好的视图bean对象 @ModelAttribut ...

  8. 实验吧CTF题库-WEB题(部分)

    看起来有点难 提交admin http://ctf5.shiyanbar.com/basic/inject/index.php?admin=admin&pass=admin&actio ...

  9. SpringMVC云题库错题及答案汇总-2

    此题目考察的是SpringMVC-注解驱动控制器,注释类型的范围: A.处理requet uri 部分的注解: @PathVariable; B.处理request header部分的注解: @Req ...

随机推荐

  1. 浅析MySQL数据碎片的产生(data free)

    浅析MySQL数据碎片的产生 2011-03-30 09:28 核子可乐译 51CTO 字号:T | T MySQL列表,包括MyISAM和InnoDB这两种最常见的类型,而根据经验来说,其碎片的产生 ...

  2. GridView EmptyDataTemplate 动态显示

    以下语句加在GridView.DataBind()之后: Table GridViewTable = ((Table)gvGridView.Controls[]); if (!isSearch) (( ...

  3. SQL Server 2005、2008 的 datetime 值范围(转)

    SQL Server 2005.2008 的 datetime 最小值是:1753-01-01 00:00:00 最大值是:9999-12-31 23:59:59.997 这与 .NET 中的 Dat ...

  4. Could not load file or assembly 'System.Data.SQLite' or one of its dependencies

    试图加载格式不正确的程 异常类型 异常消息Could not load file or assembly 'System.Data.SQLite' or one of its dependencies ...

  5. 网络/运维工程师visio2013模具图标 绘制漂亮的网络拓扑图 狮子XL工程师美学思想

    visio2013狮子XL自定义运维模具下载: 链接:http://pan.baidu.com/s/1bo779Kz 密码:xh3s 狮子XL 的美学思想: 1,一次痛苦,一生幸福. 之前,在绘制网络 ...

  6. android studio 使用问题 解决方法

    1. Error:Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.build.ap ...

  7. FineUI v3.3.2发布!目前最稳定版本,五年陈酿!

    关于FineUI基于 ExtJS 的专业 ASP.NET 控件库. FineUI的使命创建 No JavaScript,No CSS,No UpdatePanel,No ViewState,No We ...

  8. 拿到阿里,网易游戏,腾讯,smartx的offer的过程

    前言 从今年的3月14日阿里的电话面试开始,到现在4月16日在西安悦豪酒店进行的腾讯HR面到现在一个多月了,中间先后收到了阿里,网易游戏,腾讯和smartx的offer,今天早晨刚刚接到了腾讯HR的电 ...

  9. centos7 安装nginx和php5.6.25遇到 无法访问php页面 报错file not found 问题解决

    php-fpm安装完成,nginx安装完成 netstap -ntl| 发下端口正常开启 iptables -L 返现9000端口已经开放 ps -aux|grep nginx 发下nginx进程正常 ...

  10. JVM内存管理------JAVA语言的内存管理概述

    引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓 ...