以最大连续子序列和算法为例。
算法源代码:
1 #include<bits/stdc++.h> 2 #define N 1000000 3 using namespace std; 4 5 int n; 6 int a[N],dp[N]; 7 int MAXN=-(1<<30); 8 9 int main(){ 10 freopen("data.out","r",stdin);//重定向 11 cin>>n; 12 for(int i=1;i<=n;i++){//读入数据 13 cin>>a[i]; 14 } 15 dp[1]=a[1];//边界 16 for(int i=2;i<=n;i++){//核心代码 17 dp[i]=max(a[i],dp[i-1]+a[i]);//状态转移方程 18 MAXN=max(MAXN,dp[i]);//更新最优解 19 } 20 cout<<MAXN; 21 return 0; 22 }
数据生成代码(生成-50~49之间随机数据)
1 #include<bits/stdc++.h> 2 #define N 1000000 //数据规模(可调) 3 using namespace std; 4 int main (){ 5 freopen("data.out","w",stdout);//重定向 6 int i,j; 7 srand( (unsigned)time( NULL ) );//随机数种子 8 cout<<N<<endl; 9 for(i=0;i<N;i++){//生成随机数 10 j= rand()%100-50; 11 cout<<j<<" "; 12 } 13 return 0; 14 }
算法时间复杂度O(N),数据规模100w时运行时间大约0.65s,但是很明显还是不能支持数据规模1000w情况
注意:
1.两个代码中重定向的文件名称要保持一致,且两个cpp文件在同一文件夹下。
2.使用时先执行下面代码,再执行上面代码,即可输出结果,打开重定向文件可查看生成数据。