zoukankan      html  css  js  c++  java
  • 动态规划-最小子段和

     #include <stdio.h> 
    #include <stdlib.h>
    #include <time.h>
    void main() {
    int i,j,k,t,n,s,smin,q[1000],a[1000];
    t=time(0)%1000;srand(t); // 随机数发生器初始化
    printf(" 序列中n个正负项,请确定n:");
    scanf("%d",&n);
    printf(" 序列的%d个整数为: ",n);
    for(i=1;i<=n;i++) {
    t=rand()%(4*n)+10;
    // 随机产生n个整数
    if(t%2==1) a[i]=-1*(t-1)/2;
    // 把奇数变为负数,大小减半
    else a[i]=t/2;
    // 把偶数大小减半
    printf("%d,",a[i]); }
    smin=1000;q[0]=0;
    for(j=1;j<=n;j++) {
    if(q[j-1]>=0) q[j]=a[j];
    else q[j]=q[j-1]+a[j];
    if(q[j]<smin)
    //比较得最小值
    {smin=q[j];k=j;} }
    printf(" 最小子段和为:%ld ",smin);
    for(s=0,i=k;i>=1;i--)
    // 反推最小和子段的首标i
    { s+=a[i];
    if(s==smin) break; }
    printf(" 最小子段从序列的第%d项到第%d项。 ",i,k); }
  • 相关阅读:
    《JavaScript语言精粹》学习心得
    Linq笔记
    关于缓存
    JS-替换全部全部字符串
    相同数据用分号分割
    单例模式
    es6- ArrayBuffer
    vue常用属性解释。
    装饰者模式
    中介者模式
  • 原文地址:https://www.cnblogs.com/ljs-666/p/8040331.html
Copyright © 2011-2022 走看看