zoukankan      html  css  js  c++  java
  • 贪心 POJ 2586 Y2K Accounting Bug

    题目地址:http://poj.org/problem?id=2586

      1 /*
      2     题意:某公司要统计全年盈利状况,对于每一个月来说,如果盈利则盈利S,如果亏空则亏空D。
      3         公司每五个月进行一次统计,全年共统计8次(1-5、2-6、3-7、4-8、5-9、6-10、7-11、8-12),
      4         已知这8次统计的结果全部是亏空(盈利-亏空<0)。题目给出S和D,判断全年是否能盈利,
      5         如果能则求出盈利的最大值,如果不能盈利则输出Deficit
      6     贪心 or 枚举
      7         1. 贪心抓住亏损的月尽量在5个月的后面,这样可以被下一次利用,从而获取最大值
      8         2. 可以枚举是因为可能的情况少
      9             详细解释:http://blog.csdn.net/lyy289065406/article/details/6642603
     10 */
     11 #include <cstdio>
     12 #include <iostream>
     13 #include <algorithm>
     14 #include <cstring>
     15 #include <cmath>
     16 #include <string>
     17 #include <map>
     18 #include <queue>
     19 #include <vector>
     20 using namespace std;
     21 
     22 const int MAXN = 1e6 + 10;
     23 const int INF = 0x3f3f3f3f;
     24 int used[13];
     25 
     26 void work(int s, int d)
     27 {
     28     int sum = 0;    int cnt;    int k;
     29 
     30     cnt = 5;
     31     while (s * (cnt) - d * (5 - cnt) > 0 && cnt > 0)    cnt--;
     32     k = 5 - cnt;
     33     sum += s * (5 - k) - d * k;
     34     for (int i=5; i>=1 && k--; --i)        used[i] = 1;
     35 
     36     for (int i=2; i<=8; ++i)
     37     {
     38         int n = 0;
     39         for (int j=i; j<=4+i-1; ++j)
     40         {
     41             if (used[j])    n++;
     42         }
     43         int tmp = 0;
     44         tmp += s * (4 - n) - d * n;
     45         if (tmp < 0 && tmp + s < 0)        sum += s;
     46         else
     47         {
     48             sum -= d;    used[i+4] = 1;
     49         }
     50     }
     51 
     52     (sum >= 0) ? printf ("%d
    ", sum) : puts ("Deficit");
     53 }
     54 
     55 int main(void)        //POJ 2586 Y2K Accounting Bug
     56 {
     57     //freopen ("E.in", "r", stdin);
     58 
     59     int s, d;
     60     while (~scanf ("%d%d", &s, &d))
     61     {
     62         memset (used, 0, sizeof (used));
     63         work (s, d);
     64     }
     65 
     66     return 0;
     67 }
     68 
     69 /*
     70 #include <cstdio>
     71 #include <iostream>
     72 #include <algorithm>
     73 #include <cmath>
     74 using namespace std;
     75 
     76 int main(void)
     77 {
     78     //freopen ("E.in", "r", stdin);
     79 
     80     int s, d;
     81     while (~scanf ("%d%d", &s, &d))
     82     {
     83         int ans = 0;
     84         if (4 * s - d < 0)
     85         {
     86             ans = 10 * s - 2 * d;
     87         }
     88         else if (3 * s - 2 * d < 0)
     89         {
     90             ans = 8 * s - 4 * d;
     91         }
     92         else if (2 * s - 3 * d < 0)
     93         {
     94             ans = 6 * s - 6 * d;
     95         }
     96         else if (1 * s - 4 * d < 0)
     97         {
     98             ans = 3 * s - 9 * d;
     99         }
    100         else    ans = -1;
    101         if (ans > 0)    printf ("%d
    ", ans);
    102         else    puts ("Deficit");
    103     }
    104 
    105     return 0;
    106 }
    107 */
    编译人生,运行世界!
  • 相关阅读:
    Python 特殊语法:filter、map、reduce、lambda
    db2 常用命令(二)
    db2 常用命令(一)
    java 基础
    No.16 selenium学习之路之异常处理
    python之assert断言
    python之uinttest单元测试框架
    测试用例
    No.15 selenium for python JavaScript
    No.14 selenium for python table表单
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4372463.html
Copyright © 2011-2022 走看看