1. 程式人生 > >水題 第四站 HDU 1003 Max Sum

水題 第四站 HDU 1003 Max Sum

本年度動態規劃的第一道題目,完美不會。以前做過,思路也不是自己想的,大概也一知半解,這次的思路也不是自己想的。大概是忘記了動態規劃演算法,覺得這個題目不太像動態規劃
解題思路:從第一個數依次與後面的數相加,大於等於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取反:表示最小值。