杭电1003_Max Sum
这是原题的链接http://acm.hdu.edu.cn/showproblem.php?pid=1003
起初我是利用暴力的方法,求出所有序列的和的情况,每取一个序列就和以知道的最大和作对比,取大者。结果超时,代码如下,时间复杂度达到o(n^3)
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 6 int main(){ 7 int k; 8 cin >> k; 9 int q=k; 10 int f=0; 11 while(k--){ 12 int m; 13 cin >> m; 14 int a[m]; 15 for(int i=0;i<m;i++){ 16 cin >> a[i]; 17 } 18 int tp1=0; 19 int tp2=0; 20 int i,j=0; 21 int sum=0; 22 for(i=0;i<m;i++) 23 { 24 25 for( j=0;j<=i;j++){ 26 int s=j; 27 int sum1=0; 28 while(s<=i){ 29 sum1+=a[s]; 30 s++; 31 } 32 if(sum1>sum){ 33 sum=sum1; 34 tp1=j+1; 35 tp2=i+1; 36 } 37 } 38 } 39 cout << "Case " <<++f<<":"<<endl; 40 cout << sum << " " << tp1 << " " << tp2; 41 if(k!=0){ 42 cout << endl; 43 } 44 } 45 return 0; 46 }
必须换一种方法,考虑用动态规划,具体思路如下:
对于第i个数,它只有两种状态,一个是接在前一个队伍的前面,另一个是自己作为队头元素。dp[i]中存放的应该在i位置时i位置所属队伍的值。
所以统计dp中最大的值就可以知道所有队伍中的最值。据此,只需要保证dp[i]的值最大就可以。
so 状态转移方程为:dp[i]=max(dp[i-1]+a[i], a[i]);时间复杂度o(n^2),成功accept
代码
#include<iostream> #include<algorithm> #include<cstring> using namespace std; int array1[100002]; int dp[100002]; int main(){ int k; cin >> k; int f=0; while(k--) { int a; cin >> a; int start=1; int end=1; memset(array1,0,sizeof(array1)); memset(dp,0,sizeof(dp)); int sum=-9999; int i; for( i=1;i<=a;i++) { cin >> array1[i]; dp[i]=max(dp[i-1]+array1[i],array1[i]); if(dp[i]>sum){//用来更新sum sum=dp[i]; end=i; } } int sum1=0; int j; for( j=end;j>=1;j--){//确定起始点 sum1+=array1[j]; if(sum1==sum){ start=j; } } cout << "Case " <<++f<<":"<<endl; cout << sum << " " << start << " " << end <<endl; if(k!=0){ cout << endl; } } return 0; }
作者:你的雷哥
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!