zoukankan      html  css  js  c++  java
  • HOJ 1003 Max Sum 解题报告

    好几年没有做ACM了,感觉忘得差不多了,这个做着做着就打瞌睡了!言归正传,下面是我的解题思路:

    首先的话,我们可以画一个函数图,以输入数组的下标为X轴,以数组的和为Y轴,当数组和小于零时,我们使用备用的数组和sum2和备用的最小下标min2,并用flag进行标记。具体实现可以参考代码。

    需要注意的地方有:当数组所有值都小于零时,我们在此进行特别的处理,找出最小的负数和相应的下标,然后在输出时和非全负数组的结果分开。(第一次提交的时候,没有考虑到全负的情况,WA了一次)

    #include <stdio.h>
    
    int main()
    {
    	int n,num,i,c;
    	int min1,min2,max,sum1,sum2,temp,flag;
    	//freopen("in.txt","r",stdin);
    	//freopen("out.txt","w",stdout);
    	scanf("%d",&n);
    	for(c=1; c<=n; c++)
    	{
    		scanf("%d",&num);
    		flag = sum1 = sum2 = 0;
    		min1 = min2 = max  = 1;
    		int m, s, f=0;
    		for(i=1; i <= num; i++)
    		{
    			scanf("%d",&temp);
    			if(temp >= 0)f=1;
    			
    			if(1 == i){
    				m = temp;
    				s = i;
    			}		
    			else if(0 == f && temp > m){
    				m = temp;
    				s = i;
    			}
    			
    			if(flag)		//if sum2 < 0, then execute follow action. 
    			{
    				if(temp >= 0)
    				{
    					sum2 = temp;
    					min2 = i;
    					flag = 0;
    				}
    				else{
    					continue;
    				}
    			}else{
    				sum2 += temp;
    			}
    			
    			if(sum2 >= sum1)
    			{
    				max = i;
    				sum1 = sum2;
    				min1 = min2;
    				
    			}
    			else if(sum2 < 0)
    			{
    				flag = 1;
    			}
    		}
    		printf("Case %d:
    ",c);
    		if(1 == f){
    			printf("%d %d %d
    ",sum1,min1,max);
    		}
    		else{
    			printf("%d %d %d
    ",m,s,s);
    		}
    		if(c < n)printf("
    ");
    	}
    	
    	return 0;
    }
    




  • 相关阅读:
    CF601C Kleof&#225;š and the n-thlon 题解
    CSP-J2 2020 T3,T4 题解
    题解:Luogu P2051 [AHOI2009]中国象棋
    三角函数
    Luogu P1904 天际线
    计算几何初步
    C++STL(set……)
    斜率优化DP
    欧拉图、哈密顿图
    初赛—错题集
  • 原文地址:https://www.cnblogs.com/liuwu265/p/4032145.html
Copyright © 2011-2022 走看看