hdu 1003 Max Sum (基础题)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003
解题代码如下:
1 #include <cstdio> 2 #include <iostream> 3 using namespace std; 4 5 int Kesha[100005]; 6 7 int main() { 8 int t, k = 0; 9 scanf("%d", &t); 10 11 while(t--) { 12 k++; 13 int n, p = 0; 14 scanf("%d", &n); 15 for(int i=0; i<n; i++) { 16 scanf("%d", &Kesha[i]); 17 } 18 int sum = Kesha[0], max = Kesha[0]; 19 int begin = 0, end = 0; 20 for(int i=1; i<n; i++) { 21 if(sum + Kesha[i] < Kesha[i]) { //如果当前值比Kesha[i]小的话则改为Kesha[i]; 22 sum = Kesha[i]; 23 p = i; //记录下改的位置; 24 }else { 25 sum = sum + Kesha[i]; 26 } 27 if(sum > max) { //当前值比最大值大,则头尾都要改; 28 max = sum; 29 begin = p; 30 end = i; 31 } 32 } 33 printf("Case %d:\n%d %d %d\n", k, max, begin+1, end+1); 34 if(t) printf("\n"); //测试数据之后有空行; 35 } 36 return 0; 37 }
浙公网安备 33010602011771号