动态规划——最大子段和
对于给定序列a1,a2,a3……an,寻找它的某个连续子段,使得其和最大。如( -2,11,-4,13,-5,-2 )最大子段是{ 11,-4,13 }其和为20。
#include<stdio.h> //找到数组b中最大的值 int max(int *b,int n){ int max=b[0]; for(int i=0;i<n;i++){ if(b[i]>max){ max=b[i]; } } return max; } //计算i之前的最大的字段和 void maxlength(int *a,int n){ int b[n]; b[0]=a[0]; for(int i=1;i<n;i++){ if(a[i]+b[i-1]>a[i]){ b[i]=a[i]+b[i-1]; } else{ b[i]=a[i]; } } printf("%d",max(b,n)); } int main(){ int n; scanf("%d",&n); int a[n]; for(int i=0;i<n;i++){ scanf("%d",&a[i]); } maxlength(a,n); }

浙公网安备 33010602011771号