标签:write mon mission seq main 最大化 acm 报表 五个
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 18534 | Accepted: 9346 |
Description
Input
Output
Sample Input
59 237 375 743 200000 849694 2500000 8000000
Sample Output
116
28
300612
Deficit
题意:有一家公司,每个月不是亏损d就是盈利s,每个月发布一次盈利报表(包含近5个月的盈亏情况),一年一共发布8次,每次发布报表的营业总量都是亏损的,现在问这家公司全年的最高盈利是多少。
第一次:1~5
第二次:2~6
第三次:3~7
第四次:4~8
第五次:5~9
第六次:6~10
第七次:7~11
第八次:8~12
解法:贪心,要求年收入最大值也就是要收入为负的月份最少,且每个收入为负的月份都要最大化利用,即包括在数量最多的五个月内,首先先把所有月份的收入初始化成正的,然后五个月五个月的遍历,如果收入和是正的就将该月收入改成负的,重要的是进行每五个月的遍历的时候一定要逆序,也就是说优先把后面的月份置为负值,这样可以最大化的利用负值。
#include<iostream> #include<algorithm> #include<string.h> #include<math.h> #define ll long long using namespace std; int a[15]; int main() { int s,d,sum; while(cin>>s>>d) { for(int i=1;i<=12;i++)//初始化每月都是盈余 a[i]=s; for(int i=1;i<=8;i++)//一年发布8次 { sum=0; for(int j=0;j<5;j++)//每次包含五个月,且总和为亏损 sum=sum+a[i+j]; for(int k=i+4;sum>=0;k--) { if(a[k]>=0) { a[k]=-1*d; sum=sum-s-d; } else continue; } } sum=0;//mmp,记得置零 for(int i=1;i<=12;i++) sum=sum+a[i]; if(sum>=0)//等于0也算是盈余 cout<<sum<<endl; else cout<<"Deficit"<<endl; } return 0; }
标签:write mon mission seq main 最大化 acm 报表 五个
原文地址:https://www.cnblogs.com/-citywall123/p/11202531.html