动态规划最大子序列.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
?1760: 最大数字子串 Time Limit: 1500 ms ?? Memory Limit: 10000 kB?? Judge type: Multi-cases Total Submit : 1215?(245 users)???Accepted Submit : 397?(209 users)???Page View : 6115? Font Style: Aa Aa Aa 输入n(1=n=1e6)和n个整数,这n个整数的绝对值均小于1000,求最大数字子串之和。 Input 输入为多组样例数据,每组第一行为一个正整数n,第二行为n个整数组成的数字串。 Output 对于每组样例,输出仅为一行,表示最大数字子串的各项之和。 Sample Input 9 -3 4 9 2 -10 -7 11 3 -8 13 -1 2 6 -3 5 -7 14 -5 -15 1 8 -4 9 Sample Output 15 17 Hint 在第一组中,最大的数字子串是4 9 2的和 在第二组中,最大的数字子串是2 6 -3 5 -7 14的和/p1760.html 方法: -3 4 9 2 -10 -7 11 3 -8 记录方法: -3 4 13 15 5 -7 11 14 6 把当前的最大和(含当前末尾的最大和)记录下来,虽然不能直接得出最大和是多少,但可以进行遍历有哪些信誉好的足球投注网站最大值即可! 关键是要对负数处理好,看例二,最大子串含有负数。 -1 2 6 -3 5 -7 14 -5 -15 1 8 -4 9 -1 2 8 ? 如果在此处断开记录-3,那么前面的2,6 两个正数就和后边断开了,实际上2+6+(-3)0,如果后边是正数的话,完全可以加上这3个数(比如后边的5) -1 2 8 5 10 ? 相同处理: -1 2 8 5 10 3 17 12? 后面是-15,加上12(前面的子串能形成的最大和)也小于0,所以此处应该断开了!记录-15! 最后-1 2 8 5 10 3 17 12 -15 1 8 4 13 输入数组a[i],用数组s[i]记录最后一个数为a[i]时的最大子串和 状态转移方程为?? s[i]?=?max(s[i-1]+a[i],a[i]);?1=in-1?? 初始条件s[0]=a[0] 然后s[i]中最大元素即为所求。? AC代码: #includestdio.h int a, s; int main() { int i,n,num; while(~scanf(%d,n)){ scanf(%d,s); num=s; for(i=1;in;i++){ scanf(%d,a); if(s0) s=a; else s+=a; if(nums) num=s; } printf(%d\n,num); } return 0; } MLE代码: #includestdio.h int a[2000000],s[2000000]; int main() { int i,n,num; //num记录最大值 while(~scanf(%d,n)){ for(i=0;in;i++) scanf(%d,a[i]); num=s[0]=a[0]; for(i=1;in;i++) if(s[i-1]0) s[i]=a[i]; else s[i]=s[i-1]+a[i]; for(i=1;in;i++) if(nums[i]) num=s[i]; printf(%d\n,num); } return 0; }

文档评论(0)

shaoye348 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档