如果你不主动初始化,我们之间就永远不会有AC
来源:互联网 发布:88cc info com新域名 编辑:程序博客网 时间:2024/04/29 22:46
昨天晚上,简直是一场对心脏的强大考验,虽然最后发现的问题不值得一提,但是发现问题的过程,仿佛有一个世纪那么长。对此我只想说,如果你不主动初始化,我们之间就永远不会有AC……
关于动态规划求最大子序列和的问题,我已经写过一遍,但是同样的题目稍微改了一点就发现一直WA,然后由于思维定势,并且之前已经有过AC的经验,所以我总是认为代码是没有问题的,然而在学长们的帮助下,and测试了很多组数据以后终于发现了一组错误的数据,究其原因就是没有给一个标记位置的变量赋初值,然而这一次,我并没有取得最终的AC,于是误打误撞下,我删除了某一句话,神奇的是,竟然成功了,回头看这段代码,和源代码的比对却不能理解AC的原因出自何处,费尽千辛万苦,zy学长终于看出了代码中的破绽……
原来的代码是这样的
#include <iostream>#include <algorithm>#define inf 0x3f3f3f3fusing namespace std;int main(){ int k,res,i,t=0,n,cnt=1,m; cin>>n; while(n--){ cin>>k; m=n; int a[123456]={0},dp[123456]={0},st[123456]={0},last[123456]={0}; res=-inf; for(i=0;i<k;i++){ cin>>a[i]; } dp[0]=a[0]; st[0]=last[0]=0; res=max(dp[0],res); for(i=1;i<k;i++){ if((dp[i-1]+a[i])>=a[i]){ dp[i]=dp[i-1]+a[i]; st[i]=st[i-1]; last[i]=i; }else { dp[i]=a[i]; st[i]=last[i]=i; } } for(i=0;i<k;i++){ if(res<dp[i]){ t=i; res=dp[i]; } } cout<<"Case "<<cnt<<":"<<endl; cout<<res<<" "<<st[t]+1<<" "<<last[t]+1<<endl; if(n) cout<<endl; cnt++; } return 0;}
ac的代码是
#include <iostream>#include <algorithm>#define inf 0x3f3f3f3fusing namespace std;int main(){ int k,res,i,t=0,n,cnt=1; cin>>n; while(n--){ cin>>k; int a[123456]={0},dp[123456]={0},st[123456]={0},last[123456]={0}; res=-inf; for(i=0;i<k;i++){ cin>>a[i]; } dp[0]=a[0]; st[0]=last[0]=0; for(i=1;i<k;i++){ if((dp[i-1]+a[i])>=a[i]){ dp[i]=dp[i-1]+a[i]; st[i]=st[i-1]; last[i]=i; }else { dp[i]=a[i]; st[i]=last[i]=i; } } for(i=0;i<k;i++){ if(res<dp[i]){ t=i; res=dp[i]; } } cout<<"Case "<<cnt<<":"<<endl; cout<<res<<" "<<st[t]+1<<" "<<last[t]+1<<endl; if(n) cout<<endl; cnt++; } return 0;}
最后,原因就是t=0的变量初始化应该放在循环里面……所以当删除了给res的赋值之后,引起了t的更新,最后才AC,不然t不变,自然会wa
当然除了这个以外,还有需要注意的就是,数组的下标从1开始写可以减少出错,还有数组开在外面,然后使用memset来重置;
0 0
- 如果你不主动初始化,我们之间就永远不会有AC
- 只要有它,你就永远不会被打垮!
- 如果现在不开始那就很可能永远都不会开始
- 你永远不会有足够的奶酪
- 如果你不尝试自己能力之外的事情,你永远不会成长。——拉尔夫‧爱默生
- 你永远不会知道
- 如果有联系方式就可以点击时拨打电话,否则就不显示联系我们这个菜单
- 如果你不知道失败是什么,你永远无法获得成功。
- 如果我不主动理你,你是不是准备一辈子也不主动理我了…
- 这个故事告诉我们,不作死就不会死
- 《如果你每天都做分内的事情,那你永远不会升职》
- 如果你是我眼中一滴泪,那么我永远不会哭
- 母亲永远不会抛弃你
- 小虫电商,你永远学不会!
- 别再说“差一点点就…",那只证明了你永远不会成功
- 现在就去做,永远不会晚
- 如果我不主动理你,你是不是准备一辈子也不主动理我了…写的很实在
- 【Hello,world 】如果你说“我要先学习一下再开始做”那么你永远不会真正开始。
- Ubuntu16.04+Cuda8.0+Caffe+ Opencv3.2+Matlab2015b的配置、安装与编译 (二)
- 51nod-1548:欧姆诺姆和糖果
- 《Java 编程思想》002 Java内存分配和对象基础
- Python学习笔记——文件读写
- 1059.Prime Factors (25)...to be continued...
- 如果你不主动初始化,我们之间就永远不会有AC
- C++11 并发指南四(<future> 详解三 std::future & std::shared_future)
- Fiddler 从安装到使用 (creation of the root certificate was&n)
- 【DOM】Node类型之Document
- 设计模式的学习
- Swust OJ 0002 Prime Path
- 2017/02/24学习日志
- 快速直接解决AndroidStudio导入项目中的gradle问题
- Android属性动画(PropertyAnimation)(下)