水題 第四站 HDU 1003 Max Sum
阿新 • • 發佈:2018-12-04
本年度動態規劃的第一道題目,完美不會。以前做過,思路也不是自己想的,大概也一知半解,這次的思路也不是自己想的。大概是忘記了動態規劃演算法,覺得這個題目不太像動態規劃
解題思路:從第一個數依次與後面的數相加,大於等於0則累加,小於0從當前位置往後加。這部分的程式碼很容易出錯= =
上程式碼分析
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <string.h>
using namespace std ;
int a[100010];
int main ()
{
int n, m, sum, start, end, maxn,begin,cas;
cas=1;
scanf("%d",&n);
int nu=n;
while(n--)
{
printf("Case %d:\n",cas++);
scanf("%d",&m);
sum=0;
maxn=-0x7fffffff;
start=end=1;
for(int i=0; i<m; i++)
{
scanf ("%d",&a[i]);
}
for(int i=0; i<m; i++)
{
if(sum>=0)
sum+=a[i];
else
{
sum=a[i];
start=i+1;
}
if(sum>maxn)
{
maxn=sum;
begin = start;
end = i+1 ;
}
}
printf("%d %d %d\n",maxn,begin,end);
if(nu!=cas-1)
printf("\n");
}
return 0;
}
(1)可以算一下 0x7FFFFFFF 是多少
每個十六進位制數4bit,因此8位16進位制是4個位元組,剛好是一個int整型
F的二進位制碼為 1111
7的二進位制碼為 0111
這樣一來,整個整數 0x7FFFFFFF 的二進位制表示就是除了首位是 0,其餘都是1
就是說,這是最大的整型數 int(因為第一位是符號位,0 表示他是正數)
用 INT_MAX 常量可以替代這個值。
~0取反:表示最小值。