zoukankan      html  css  js  c++  java
  • POJ3273Monthly Expense

    今天晚上cl叫我写的,我打开一看,一开始没什么思路,感觉很像DP,后来他说就二分就可以了。然后我突然想到这不就是四省赛热身赛的题么,而且白书上也有写题解。。o(︶︿︶)o 唉,题没做还是不熟悉。

    因为是把天数化成连续的几段,所以把答案进行二分查找,每个答案可以用线性的时间判断对错,因此总的时间是nlogn。

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #define MAXN 100050
    using namespace std;
    
    int g[MAXN];
    int s;
    int N,M;
    
    bool solve(int m){
    	int len=1;
    	int tt=0;
    	for(int i=0;i<N;i++){
    		if(tt+g[i]<=m)
    		{
    			tt=tt+g[i];
    		}
    		else
    		{
    			if(g[i]>m)return false;
    			tt=g[i];len++;
    		}
    	}
    	if(len<=M)
    		return true;
    	else return false;
    }
    int main(){
    
    	while(scanf("%d%d",&N,&M)==2){
    	s=0;
    	for(int i=0;i<N;i++)
    	{
    		scanf("%d",&g[i]);
    		s+=g[i];
    	}
    	int l=0,r=s;
    	int ans=0;
    	while(l<=r){
    		int mid=(l+r)>>1;
    		if(solve(mid)){
    			ans=mid;
    			r=mid-1;
    		}
    		else{
    			l=mid+1;
    		}
    
    	}
    	printf("%d\n",ans);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    c#配置文件
    C#预处理指令
    C#面向对象详解
    231. Power of Two
    226. Invert Binary Tree
    C语言函数入参压栈顺序为什么是从右向左?
    对C++ 虚函数的理解
    悲观锁和乐观锁
    什么是索引
    CHAR 和VARCHAR的区别
  • 原文地址:https://www.cnblogs.com/arbitrary/p/2622470.html
Copyright © 2011-2022 走看看