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

    #include <stdio.h> 
    #include <stdlib.h>
    #include <time.h>
    int j,a[1000];
    void main() {
    int i,k,n,t,s,smin;
    int q(int j);
    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;
    for(j=1;j<=n;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); }
    int q(int j)
    // 定义递归函数q(j)
    {int f;
    if(j==0) f=0;
    else { if(q(j-1)>=0) f=a[j];else f=q(j-1)+a[j]; }
    return f; }

     

  • 相关阅读:
    css定位
    题解 P2345 【奶牛集会】
    浅谈主席树
    浅谈Manacher算法
    CSP2019 游记
    P5025 [SNOI2017]炸弹
    浅谈2-SAT
    DAY 5模拟赛
    DAY 3
    Luogu P2915 [USACO08NOV]奶牛混合起来
  • 原文地址:https://www.cnblogs.com/ljs-666/p/8045134.html
Copyright © 2011-2022 走看看