POJ-2479
2015-08-20 00:08
274 查看
DP基础题
属于DP求最大字串和的变形
d1[x]代表在a[0,x]中,包含a[x](即a[x',x])的最优解——其实就是标准DP求最大字串是用的数组
c1[x]代表在a[0,x]中,可以不包含a[x]的最优解。
d2, c2是反向的,道理相同。
转移方程
d1[i] = (d1[i-1] < 0) ? (a[i]) : (d1[i-1] + a[i]);
c1[i] = maxx(c1[i-1], d1[i]);
d2, c2类似
最终通过c1, c2计算出结果即可
这一题虽然很弱,但收获不小。
1.从今以后,尽量避免iostream这个坑,TLE非常令人感动,即使加上了看不懂的std::ios::sync_with_stdio(false)也无济于事。
2.通过本题,学会了白书上的批处理标程,虽说最后没其什么作用,但好歹是会了。
3.终于不TLE了居然还WA,一开始我是崩溃的,最终发现一开始我就猜到的全是负的那种数据真的是存在的,但是我明明考虑到了啊,好吧,一小时以后我终于发现,我的思路没有问题,只是中间一个c2打成c1了,看来这个起名的方式以后得好好考虑考虑。
属于DP求最大字串和的变形
d1[x]代表在a[0,x]中,包含a[x](即a[x',x])的最优解——其实就是标准DP求最大字串是用的数组
c1[x]代表在a[0,x]中,可以不包含a[x]的最优解。
d2, c2是反向的,道理相同。
转移方程
d1[i] = (d1[i-1] < 0) ? (a[i]) : (d1[i-1] + a[i]);
c1[i] = maxx(c1[i-1], d1[i]);
d2, c2类似
最终通过c1, c2计算出结果即可
#include<cstdio> #define MAXN 50010 #define maxx(a,b) ((a)>(b))?(a):(b) int a[MAXN]; int d1[MAXN], c1[MAXN]; int d2[MAXN], c2[MAXN]; int main(void) { //std::ios::sync_with_stdio(false); int T, n; int ans; scanf("%d", &T);//cin>>T; for(int t = 0; t < T; t++){ scanf("%d", &n);//cin>>n; for(int i = 0; i < n; ++i) scanf("%d", &a[i]);//cin>>a[i]; d1[0] = a[0]; c1[0] = a[0]; for(int i = 1; i < n; ++i){ d1[i] = (d1[i-1] < 0) ? (a[i]) : (d1[i-1] + a[i]); c1[i] = maxx(c1[i-1], d1[i]); } d2[n-1] = a[n-1]; c2[n-1] = a[n-1]; for(int i = n-2; i >= 0 ; --i){ d2[i] = (d2[i+1] < 0) ? (a[i]) : (d2[i+1] + a[i]); c2[i] = maxx(c2[i+1], d2[i]); } ans = c1[0] + c2[1]; for(int i = 2; i < n; ++i) ans = maxx(ans, c1[i-1]+c2[i]); printf("%d\n", ans);//cout<<ans<<endl; /*for(int i = 0; i < n; ++i) printf("c1[%d] = %d\n", i, c1[i]); for(int i = 0; i < n; ++i) printf("c2[%d] = %d\n", i, c2[i]);*/ } return 0; }
这一题虽然很弱,但收获不小。
1.从今以后,尽量避免iostream这个坑,TLE非常令人感动,即使加上了看不懂的std::ios::sync_with_stdio(false)也无济于事。
2.通过本题,学会了白书上的批处理标程,虽说最后没其什么作用,但好歹是会了。
3.终于不TLE了居然还WA,一开始我是崩溃的,最终发现一开始我就猜到的全是负的那种数据真的是存在的,但是我明明考虑到了啊,好吧,一小时以后我终于发现,我的思路没有问题,只是中间一个c2打成c1了,看来这个起名的方式以后得好好考虑考虑。
相关文章推荐
- Array
- Scrapy爬虫框架入门
- NYOJ 71 独木舟上的旅行 (贪心)
- 【日记】2015-08-19
- eclipse调试(转)
- Java基础——反射(待续)
- elasticsearch安装
- Verilog HDL之于FPGA--阻塞与非阻塞赋值
- struts2传递对象
- http 和 Tcp 的区别
- HDOJ 5396 Expression DP
- java之 ------ 设计思想
- 【Powershell】【计数器】实时获取邮箱服务器的队列
- ajax提交整个form表单
- 基础理解部分
- Android SDK Android NDK Android Studio 官方下载地址
- hdu 5400 Arithmetic Sequence
- Twig中文说明手册
- Android SDK Android NDK Android Studio 官方下载地址
- 基于核方法的模糊C均值聚类