Y2K Accounting Bug POJ 2586(思维+贪心)(自闭版贪心)

计算机机械师会计(ACM)遭受了千年虫的困扰,失去了一些为微软公司准备年度报告的重要数据。              

他们只记得微软公司在1999年的每个月和每个月都公布盈余或赤字,当微软公司公布盈余时,盈余的数量是s,当微软公司公布赤字时,赤字是d。他们不记得公布盈余或赤字的是哪个月或几个月。与其他公司不同的是,微软公司在一年中连续5个月公布业绩。ACM知道这8个公告中的每一个都报告了赤字,但他们不知道赤字有多大。总会计师几乎肯定微软公司将在1999年全年公布盈余。几乎但不完全是。         

写一个程序,决定微软公司在1999年是否出现赤字,或者如果1999年可能出现盈余,那么他们可以公布的最大盈余额是多少。              

输入              

输入是一系列行,每个行包含两个正整数s和d。              

产量              

对于每一行输入,输出一行,其中包含一个整数,给出全年的盈余金额,如果不可能,则输出赤字。 

Sample Input

59 237
375 743
200000 849694
2500000 8000000

Sample Output

116
28
300612
Deficit

一看到这道题目,这是啥玩意,蒙圈了,题目完全看不懂啊。这个8个公告是个啥,连续5个月公布一下业绩,都是啥?一脸蒙圈。

去看了看题解,原来是每五个月 公布业绩,每月的业绩是盈余和亏损两种可能,但是题目已经说明确了,每五月公布一次业绩且每次公布都是赤字(一个月亏了也可以叫赤字,每个业绩的公布的赤字的意思就是前几个月的盈利都比亏的少,所以前几个月加起来是亏的,所以是赤字),这块很难懂,很难看懂题目。这个 8 次公告就是1-5  2-6  3-7  4-8  5-9   6-10   7-11   8-12 这8次总结 ,每次都是赤字,就是上面说的盈利总和小于亏的总和。要满足的条件是每次公布业绩都是赤字(上面说了意思了),而且是每5次,有这几种情况,5个月中有一次赤字,有两次赤字,有三次赤字,有四次赤字,有五次赤字,而且是这八次的每一次都会有赤字()。我们就有了这几种情况 :

在保证连续5个月都亏损的前提下,使得每5个月中亏损的月数最少.(s是盈利,d是亏损),毕竟是贪心,所以每五次都要尽量少的亏损,但还是要必须有 至少一次,所以就采用这种排列方式,否则就不是最少的亏损了(可以想想)。然后就是盈利最大值,因为就只有12 个月,每五个月 一个周期,就算每五个只有一个盈利,最后那两个月肯定是有盈利的 (除非全都是亏损),所以12个月份就全都算上就是盈利的最大值(说的有点不清楚,想想就会出来的)。 
              x=1:  ssssd,ssssd,ss    d>4s     赢利10个月  10s-2d
              x=2:  sssdd,sssdd,ss    2d>3s    赢利8个月     8s-4d
              x=3:  ssddd,ssddd,ss    3d>2s    赢利6个月     6s-6d 
              x=4:  sdddd,sdddd,sd    4d>s     赢利3个月     3s-9d
              x=5:  ddddd,ddddd,dd    4d<s     无赢利

代码:


#include<stdio.h>
#include<string>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=1005;
#include<iostream>
typedef long long ll;
int main()
{
	int s,d;
	int res;
	while(cin>>s>>d)
	{
		if(d>4*s)
			res=10*s-2*d;
		else if(2*d>3*s)
			res=8*s-4*d;
		else if(3*d>2*s)
			res=6*(s-d);
		else if(4*d>s)
			res=3*(s-3*d);
		else
			res=-1;
		if(res<0)
			cout<<"Deficit"<<endl;
		else
			cout<<res<<endl;	
	}
	return 0;
}

这道贪心,完全出乎我对贪心的想象,以前做惯了区间类的题目,不知如何下手。
 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值