POJ 2586&&CF 245E

贪心策略

(这题是真没读懂什么意思)

每连续5个月都是亏损,在贪心选择下,必定会选择尽可能多的盈利月数X,但要使得X*S<(5-X)*d;

而这8个阶段中相邻的阶段都会都相同的四个月的子集,如阶段 1 为 1 - 5 月,阶段 2 为 2 - 6 月,其中的 2 - 5 月就是

公共子集,故应该尽可能在这些重叠区间内安放亏损月以满足题目要求

 

从而列举所有情况:

1 .若SSSSD亏空,那么全年可能最大盈利情况为: SSSSDSSSSDSS

 

2.若SSSDD亏空,那么全年可能最大盈利情况为: SSSDDSSSDDSS

3.若SSDDD亏空,那么全年可能最大盈利情况为::SSDDDSSDDDSS

4.若SDDDD亏空,那么全年可能最大盈利情况为::SDDDDSDDDDSD

5.若DDDDD亏空,那么全年可能最大盈利情况为: DDDDDDDDDDDD

 

 

#include <iostream>
#include <cctype>
#include <string>
#include <stdio.h>
using namespace std ;

int main()
{
    int s, d, re;
    while(scanf("%d%d",&s, &d)!=EOF)
    {
        if(4*s-d<0)
            re = 10*s-2*d;
        else if(3*s-2*d<0)
            re = 8*s-4*d;
        else if(2*s-3*d<0)
            re = 6*s-6*d;
        else if(s-4*d<0)
            re = 3*s-9*d;
        else
            re = -1;
        if(re<0)
            printf("Deficit\n");
        else
            printf("%d\n", re);
    }
}

 

 

 

CF 245E

 

 

Description

Polycarpus just has been out of luck lately! As soon as he found a job in the "Binary Cat" cafe, the club got burgled. All ice-cream was stolen.

On the burglary night Polycarpus kept a careful record of all club visitors. Each time a visitor entered the club, Polycarpus put down character "+" in his notes. Similarly, each time a visitor left the club, Polycarpus put character "-" in his notes. We know that all cases of going in and out happened consecutively, that is, no two events happened at the same time. Polycarpus doesn't remember whether there was somebody in the club at the moment when his shift begun and at the moment when it ended.

Right now the police wonders what minimum number of distinct people Polycarpus could have seen. Assume that he sees anybody coming in or out of the club. Each person could have come in or out an arbitrary number of times.

Input

The only line of the input contains a sequence of characters "+" and "-", the characters are written one after another without any separators. The characters are written in the order, in which the corresponding events occurred. The given sequence has length from 1 to 300 characters, inclusive.

Output

Print the sought minimum number of people

Sample Input

Input
+-+-+
Output
1
Input
---
Output
3
[cpp]  view plain copy
 
  1. /*此题要求看过的最少人数。如果看到之前看到人进去,现在看到人出去。那么就把他当做之前看过进去的人 
  2. 如果之前看到人出去,现在又看到人进去,也把他们当做同一个人。此题转换为根据我做的进出记录,同时在商店 
  3. 中的最大人数*/  
  4. #include <iostream>  
  5. #include <cstdio>  
  6. #include <cstring>  
  7. #include <string>  
  8. using namespace std;  
  9. char A[308];  
  10. int main()  
  11. {  
  12.     while(cin>>A)  
  13.     {  
  14.         int len=strlen(A);  
  15.         int in=0,out=0,sum=0;  
  16.         for(int i=0;i<len;i++)  
  17.         {  
  18.             if(A[i]=='+')  
  19.             {  
  20.                 in++;  
  21.                 if(out) out--;  
  22.                 else sum++;  
  23.             }  
  24.             else   
  25.             {  
  26.                 out++;  
  27.                 if(in) in--;  
  28.                 else sum++;  
  29.             }  
  30.         }  
  31.         cout<<sum<<endl;  
  32.     }  
  33.     return 0;  
  34. }  
  35.  

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值