ACM学习历程—HDU5586 Sum(动态规划)(BestCoder Round #64 (div.2) 1002)
2024-08-29 07:53:37
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5586
题目大意就是把一段序列里面的数替换成f(x),然后让总和最大。
首先可以计算出初始的总和,以及每一个值换成f(x)的增益a[x]。
那么就是求一段子序列a[x]的最值了,经典的DP。
其实我一开始想到这个思路是因为列了一个式子:
S = sum(n)-sum(rt)+sum’(rt)-sum’(lt)+sum(lt)
=sum(n)+(sum’(rt)-sum’(lt))-(sum(rt)-sum(lt))
于是发现了就是求lt到rt差值和的最值。
最后答案加上初始的总和输出。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <string>
#define LL long long using namespace std; const int maxN = ;
int n, a[maxN];
LL s; void input()
{
s = ;
int k;
for (int i = ; i < n; ++i)
{
scanf("%d", &k);
s += k;
a[i] = (*k+)%-k;
}
} void work()
{
LL ans = , now = ;
for (int i = ; i < n; ++i)
{
if (now >= ) now += a[i];
else now = a[i];
ans = max(ans, now);
}
cout << ans+s << endl;
} int main()
{
//freopen("test.in", "r", stdin);
while (scanf("%d", &n) != EOF)
{
input();
work();
}
return ;
}
最新文章
- QML 从无到有 2 (移动适配)
- 【小白的CFD之旅】15 四种境界
- Dubbo_创建Dubbo服务并在ZooKeeper注册,然后通过Jar包执行
- 【转】ViewPager实现一个页面多个Item的显示
- Css中光标,DHTML,缩放的使用
- ZOJ-3349 Special Subsequence 线段树优化DP
- 《通过脚本查看哪些ip被占用》shell笔记
- Spring中的创建与销毁
- Vue + element-ui
- iOS Plist NSUserDefaults 数据存储
- Gamma原理及快速实现算法(C/C++)(转)
- JS获取网站StatusCode,若存在写入文件
- vue-修改vue项目运行端口号
- 产品研发团队如何融合OKR与Scrum敏捷开发?
- C#使用Linq to Sqlite
- B - Moo Volume
- 使用sqoop从mysql导入数据到hive
- webgl之3d动画
- Logistic Regression – Geometric Intuition
- C#7.0新增功能点