syhd142 |
|
|||
日歷
統計
導航常用鏈接留言簿(2)隨筆檔案(23)文章分類(270)
文章檔案(122)我的豆瓣搜索最新評論
閱讀排行榜
評論排行榜 |
DP水題,以前做過,之所以重做事因為原來并沒有理解狀態轉移方程的意義。今天才恍然明白。 令sum表示以i-1個元素結尾的最大連續字段和,則當sum>0時,sum+=a[i],否則sum=a[i]; 因為當sum>0時sum加上當前值a[i]肯定比a[i]要大,而Sum<0時肯定要小,所以sum<0時,sum=a[i]。 #include <stdio.h>
int main() { int n, sum, ans, st, ed, x, y, a[10005]; while(scanf("%d", &n), n) { for(int i = 0; i < n; i++) scanf("%d", &a[i]); ans = sum = x = y = st = ed = a[0]; for(int i = 1; i < n; i++) { if(sum > 0) sum += a[i], ed = a[i]; else sum = a[i], st = ed = a[i]; if(sum > ans) { ans = sum; x = st, y = ed; } } if(ans < 0) ans = 0, x = a[0], y = a[n - 1]; printf("%d %d %d\n", ans, x, y); } return 0; }
|
![]() |
|
Copyright © Fucker | Powered by: 博客園 模板提供:滬江博客 |