码迷,mamicode.com
首页 > 其他好文 > 详细

poj2586Y2K Accounting Bug

时间:2015-02-09 18:33:15      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:poj   poj2586   y2k accounting bug   枚举   贪心   

背景:再做这道题的时候,我严重怀疑我的英语能力,o(︶︿︶)o 唉,翻译了一个多小时。

思路:由于本题情况比较少,所以可以直接枚举出所有的情况,首先要找出五个月中最少亏损月份,然后就开始枚举出五种情况,最后输出即可。

#include <stdio.h>
void print(int n)
{
    if(n<0) printf("Deficit\n");
    else printf("%d\n",n);
}
void YinKui(int m,int s,int d)
{
    int n=0;
    if(m==1) n=10*s-2*d;
    else if(m==2) n=8*s-4*d;
    else if(m==3) n=6*s-6*d;
    else if(m==4) n=3*s-9*d;
    else n=-1;
    print(n);
}
void Deficit_Month(int s,int d)
{
    int m;
    if(d>4*s) m=1;
    else if(d*2>3*s) m=2;
    else if(d*3>2*s) m=3;
    else if(d*4>s) m=4;
    else m=5;
    YinKui(m,s,d);
}
int main(void)
{
    int s,d;
    while(scanf("%d %d",&s,&d)==2)
        Deficit_Month(s,d);
    return 0;
}

然后看了同学的代码,发现也可以用贪心算法。

下面附同学的代码

#include<stdio.h>  
int a[15];  
int main ()  
{  
    int s,d;  
    while (scanf("%d%d",&s,&d)==2)  
    {  
        int sum=0;  
        int i,j;  
        for(i=5;i>=0;i--)       //一定要写成i>=0   若写成i>0可能出现一种情况i=1的时候sum>0 然后由于i>0退出了  sum仍然>0   
        {                      //写成i>=0 则上面那种情况变成i=1时sum>0,i=0时sum<0 break   
            sum=i*s-(5-i)*d;  
            if(sum<0)break;  
        }  
        for(j=0;j<i;j++)  
            a[j]=s;  
        for(j=i;j<5;j++)  
            a[j]=-d;  
        for(i=5;i<12;i++)  
        {  
            a[i]=a[i-5];  
            sum+=a[i];  
        }  
        if(sum>0)  
        printf("%d\n",sum);  
        else printf("Deficit\n");  
    }  
    return 0;  
}  


poj2586Y2K Accounting Bug

标签:poj   poj2586   y2k accounting bug   枚举   贪心   

原文地址:http://blog.csdn.net/qiweigo/article/details/43671925

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!