zoukankan      html  css  js  c++  java
  • [CodeForces 893D] Credit Card 贪心

      题意:

        Recenlty Luba有一张信用卡,一开始金额为0,每天早上可以充值任意数量的钱,但有限制,卡里的钱不能超过D。到了晚上,银行会对信用卡进行一次操作,操作有三种:

           1.a[i]>0,、充入a[i]元。 2.、a[i]<0 、扣除a[i]元。 3.、a[i]=0 查询卡里的金额。

        若干在a[i]=0时,卡里的钱为负的或者某天卡里的钱>D,则卡将被冻结,问Recenlty Luba至少需要去银行存多少次钱,使得在接下来的n天里,银行卡不会被冻结。

     

      思路:

        贪心,当a[i]=0时,存入的钱的下界就是使得sum(总金额)=0,当每次需要存钱时以下界去存,还会使得钱超过D,则必定会被冻结。

           在不被冻结的基础上,当a[i]=0时,存入钱的上界为sum=d,但后面当sum>d是,要将sum变为D

      

     1         cin>>n>>d;tmp=0;
     2     int mk=1;
     3     For(i,1,n) {
     4         cin>>a[i];
     5         if(a[i]!=0) tmp+=a[i];
     6         else if(tmp<0) tmp=0;
     7         if(tmp>d) mk=0;
     8     }
     9     if(!mk) {cout<<-1<<endl;return ;}
    10     tmp=0;
    11     int ans=0;
    12     For(i,1,n){
    13         if(a[i]!=0) tmp+=a[i];
    14         if(tmp>d) tmp=d;
    15         if(a[i]==0 && tmp<0) tmp=d,ans++;    
    16     }
    17     cout<<ans<<endl;
    View Code
  • 相关阅读:
    UITableView学习笔记
    IOS基础之设置APP的名字、设置图标、添加等待加载时的图片
    UIScrollView,UIPageControl
    UIPickerView基本用法
    最大公约数和最小公倍数
    快速幂、快速乘
    素数筛
    最小生成树
    BZOJ1070 [SCOI2007]修车
    BZOJ1109 [POI2007]堆积木Klo
  • 原文地址:https://www.cnblogs.com/cjbiantai/p/9605007.html
Copyright © 2011-2022 走看看