int MAXSum(int n, int a[])
{
int sum = 0, b = 0; //sum存储当前最大b[j], b存储当前值b[j]
for(int i = 0; i < n; i++){
if(b > 0) b += a[i];
else b = a[i]; //一旦某个区段和为负,从下一个位置累和
if (sum < b) sum = b;
}
return sum;
}
2贪心算法.
2.1能采用贪心算法求最优解的问题,一般具有的重要性质:最优子结构性质和贪心选择性质
2.2 哈夫曼编码的贪心算法所需的计算时间为nlogn
2.3 背包问题的贪心算法所需的计算时间为nlogn
2.4 背包问题的贪心算法
void Knapsack(int n, float M, float v[], float w[], float x[])
M:背包容量 v:价值 w:重量 x:装入份额
{
Sort(n,v,w); //把重量,价值进行排序
int i;
for(i = 1; i <= n; i++) x[i] = 0;
float c = M;
for(i = 1; i <= n; i++){
if(w[i] > c) break; // 背包容量不够
x[i] = 1; //全部装入
c -= w[i]; //背包容量减少
}
if(i <= n) x[i] = c/w[i] //能装入多少
}
2.5 贪心算法求活动安排问题:
void GreedySelector(int n, Type s[], Type f[], bool