动态规划太特么难了!!

 

 

核心代码:
        for(i = 1; i <= n; i++){
        pre[i][i] = a[i];
        for(j = i + 1; j <= n; j++){
            pre[i][j] = a[j] * pre[i][j - 1] % mod;
            printf("pre[%d][%d] = %d   ",i,j,pre[i][j]);
        }
        printf("\n");
    }
    dp[0] = 0;dp[1] = a[1];
    for(i = 2; i <= n; i++){
        for(j = 0; j < i; j++){
        
            dp[i] = max(dp[i], dp[j] + pre[j + 1][i]);
            printf("dp[%d] = %d\n",i,dp[i]);
        }
    }
最大权值分数组

 

核心代码   
     for(i = 1; i <= n; i++) {
        scanf("%d",&a[i]);
    }
    f[1] = a[1];
    f[2] = a[2];
    for(i = 3; i <= n; i++) {
        f[i] = min(f[i - 1] + a[1] + a[i], 
                               f[i - 2] + 2 * a[2] + a[1] + a[i]);
    }        
带手电筒过桥

 

核心代码:     
        for(i = 1; i <= n; i++) {
        scanf("%d",&a[i]);
    }
    for(i = 1; i <= n; i++){
        dp[i] = 1;
        for(j = i - 1; j > 0; j--){
            if(a[j] < a[i]){
                dp[i] = max(dp[i], dp[j] + 1);
            }
        }
        if(dp[i] > ans){
            ans = dp[i];
        }
    }            
最长上升序列

 

        int l1 = strlen(s1);
    int l2 = strlen(s2);
    for(i = 0; i < l1; i++) {
        dp[i][0] = i;
    }
    for(i = 0; i < l2; i++) {
        dp[0][i] = i;
    }
    for(i = 1; i <= l1; i++) {
        for(j = 1; j <= l2; j++) {
            if(s2[j - 1] == s1[i - 1]) {
                dp[i][j] = dp[i - 1][j - 1];
            }else{
                dp[i][j] = min(dp[i - 1][j],dp[i][j - 1],                
                                                      dp[i - 1][j - 1]) + 1;
            }
        }
    }                        
字符串修改

 

   
     for(i = 1; i <= l1; i++) {
        for(j = 1; j <= l2; j++) {
            if(s2[j - 1] == s1[i - 1]) {
                dp[i][j] = dp[i - 1][j - 1] + 1;
            }else{
                dp[i][j] = max(dp[i - 1][j],dp[i][j - 1]);
            }
        }
    }
最长公共子串

 

        dp[0] = 1;
    for(i = 1; i <= n; i++){
        for(j = i; j <= n; j++){
            dp[j] += dp[n - j];
        }
    }
    printf("%d\n",dp[n]);    
数能有几个数组成

 

posted @ 2021-02-27 20:11  荣荣荣荣荣荣  阅读(97)  评论(0)    收藏  举报