hdu 1003 Max Sum

来源:互联网 发布:江西在线网安全知让 编辑:程序博客网 时间:2024/05/21 02:34

今晚把自己的编辑器给折腾了一下,耽误了不少时间,依旧是按照网上大神给出的线路一点一点的练习。

这道题目还是水,状态转移方程是dp[i] = max(dp[i-1]+a[i],a[i])得到结果之后再搜索一遍就好,这道题目还要求求出其实位置,末尾位置其实已经知道了,在求其实位置的过程中我采用了遍历的方法。

题目链接:https://vjudge.net/problem/HDU-1003

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int inf = 0x3f3f3f3f;const int maxn = 100005;int dp[maxn];int a[maxn];int n;int ncase , cnt = 1;void solve () {int start , end;int ans = -inf;dp[1] = a[1];for (int i = 2 ; i <= n ; i++) {dp[i] = max(dp[i-1]+a[i] , a[i]);}for (int i = 1 ; i <= n ; i++)if (ans <  dp[i]) {ans = dp[i];end = i;}int tmp = 0;for (int i = end ; i >= 1 ; i--) {tmp += a[i];if (tmp == ans) start = i;}printf("Case %d:\n", cnt++);printf("%d %d %d\n", ans , start , end);}int main () {scanf("%d" , &ncase);while (ncase--) {memset(dp,0,sizeof(dp));memset(a,0,sizeof(a));scanf("%d" , &n);for (int i = 1 ; i <= n ; i++)scanf("%d" , &a[i]);solve();if(ncase) printf("\n");}}


0 0
原创粉丝点击