杭电1003(大数)简单的DP简单过
此题名字是大数,其实不用long int 也是可以Ac的,不过用了还是好些,毕竟大赛中测试数据还是比较好的,这是个典型的DP类的最大子序列题。这道题影藏了很多细节,好多人的代码和杭电的大神贴出来的参考代码都是一样的,但是就是不给Ac,这种情况很多,关键是很多时候要考虑边界情况,因为杭电的测试中很多组数据必定会包含有他的各个方向,大部分都是用于看率步骤而导致的。下面选择几种方法浅谈一下: ? ? 如果只是求最长子序列我想还是很简单的,关键是还要输出他的起始端的数字,这个就有点麻烦了。 ? ?题目的大意是给你一段数字,要求是求出连续的一段中可能的数字的和的最大值。对于每个测试的情况下,你应该输出两行,第一行是“案例:”#意味着测试用例数,第二行包含三个整数序列中,最大琛子的起始位置序列的子序列的结束位置,如果有一个以上的结果,输出的第一个输出一个空行之间的两种情况。 ? ? ?方法一(整个考虑): ? ?因为题目中是每个数字都-1000到1000.所以我们可以用一个数(小于-1000即可)这是因为这个数是用来记录一连串数字的和的,由于不知道第一个输入的输的大小,所以应该以最小的数来考虑。 ? ? 下面以代码来分析一下: #include<iostream> ? ? ? ? ? ? maxn=sum; ? ? ? ? ? ? ? ?但是开始的数字就是在不成功的时候也是会变化的, ? ? ? ? ? ? ? ? ?所以我们要记住在这种情况下,就是要定格 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?因为他已经不可能是最大值了,就令sum=0;相加是在上面事实现的。 ? ? ? ? ? ? ? ? k=i+1; ? ? ? ? ? 这个时候初始的地方也是要变得如上面的2,-3,原来是start=1,这时直接转到3上因为i=2了。 下面贴几个例子,如果这几个例子过了就差不多了 -1 ?-2 ?-3 10(在此省略了前面的数字,下同) 结果:Case 1: 10 4 4 1 2 3 -100 1 2 3 -100 1 2 2 2 2 结果Case 2:9 9 13 -1 -2 -3 -4 -5 结果:Case ?3:-1 1 1 -3 -2 -1 -2 -3? 结果:Case 4:-1 3 3? ?0 0 2 0 结果:Case :2 1 3 如果上诉结果都没有对的话是不可能Ac的,那就是自己的程序的问题了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |