Chinaunix首页 | 论坛 | 博客
  • 博客访问: 481164
  • 博文数量: 59
  • 博客积分: 345
  • 博客等级: 二等列兵
  • 技术积分: 1380
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-18 22:44
个人简介

to be myself

文章分类

全部博文(59)

文章存档

2017年(5)

2013年(47)

2012年(3)

2011年(4)

分类: C/C++

2013-03-02 18:14:57

Memory: 140K  Time: 0MS 
枚举下面这样的5种情况
         "ssssdssssdss",
         "sssddsssddss",
         "ssdddssdddss",
         "sddddsddddsd",

   "dddddddddddd"


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <string.h>


  3. long s, d, max;

  4. /************************************
  5. |func:检查此串对应的每个阶段是否满足亏损
  6. |args:串str[k]
  7. |retn:若满足返回1,否则返回0
  8. ************************************/
  9. int Check(char str[][12], int k)
  10. {
  11.     int i, j;
  12.     long sum;
  13.     for (i=0; i<8; i++)
  14.     {
  15.         sum = 0;
  16.         for (j=i; j<i+5; j++)
  17.         {
  18.             if (str[k][j] == 's')
  19.             {
  20.                 sum += s;
  21.             }
  22.             else
  23.             {
  24.                 sum -= d;
  25.             }
  26.         }
  27.         if (sum > 0)
  28.         {
  29.             return 0;
  30.         }
  31.     }
  32.     return 1;
  33. }

  34. int main()
  35. {

  36.         //5中情况对应的s,d的个数,方便求和
  37.     int a[5][2]=
  38.     {
  39.         10, 2,
  40.          8, 4,
  41.          6, 6,
  42.          3, 9,
  43.          0, 12
  44.     },i, j;
  45.     
  46.     char str[5][12]=
  47.     {
  48.         "ssssdssssdss",
  49.         "sssddsssddss",
  50.         "ssdddssdddss",
  51.         "sddddsddddsd",
  52.         "dddddddddddd"
  53.     };
  54.     while(scanf("%ld %ld", &s, &d) == 2)
  55.     {
  56.         i = 0;
  57.         //初始化最大值
  58.         while(!Check(str, i))
  59.         {
  60.             i++;
  61.         }
  62.         max = a[i][0] * s - a[i][1] * d;
  63.         
  64.         for (i++; i<5; i++)
  65.         {
  66.             for (j=0; j<2; j++)
  67.             {
  68.                     //符合题目条件并且总和比max大才更新max
  69.                 if (Check(str, i) && a[i][0] * s - a[i][1] * d > max)
  70.                 {
  71.                     max = a[i][0] * s - a[i][1] * d;
  72.                 }
  73.             }
  74.         }
  75.         
  76.         if (max < 0)
  77.         {
  78.             printf("Deficitn");
  79.         }
  80.         else
  81.         {
  82.             printf("%ldn", max);
  83.         }
  84.     }
  85.     
  86.     return 0;
  87. }

解1参照另外一篇 ”POJ 2586 Y2K Accounting Bug 解1 贪心

2011-03-26 22:38 发表于百度空间,今搬至CU。


阅读(1073) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~