zoukankan      html  css  js  c++  java
  • 四月份该做的事情

    四月该做的事情

    1. 每周一套cf题
    2. python 入门
    3. 把实验都做完吧,还有课程

    习题巩固

    石子归并 https://www.lintcode.com/problem/stone-game/description

    int stoneGame(vector<int> &A) {
        int l = A.size();
        int dp[510][510]={0};
        long long sum[510][510]={0};
        for(int i=0; i<l; i++)
            for(int j=i; j<l; j++) {
                sum[i][j] = sum[i][j-1] + A[j];
                // printf("sum[%d][%d]: %d ",i,j,sum[i][j]);
                // if(j == l-1) puts("");
            }
        for(int len=2; len<=l; len++) {
            for(int i=0; i+len-1 <l; i++) {
                int j = i+len-1;
                long long mn = 0x3f3f3f3f;
                for(int k=i; k<j; k++) {
                    mn = min(mn, dp[i][k] + dp[k+1][j] + sum[i][j]);
                    //printf("%d, %d, %d %d %lld
    ",i,j,dp[i][j],dp[i+1][j],dp[i][j] + dp[j+1][k] + sum[i][j]);
                }
                dp[i][j] = (int)mn;
                //printf("dp[%d][%d]: %d ",i,j,dp[i][j]);
               // if(j == l-1) puts("");
            }
        }
        return dp[0][l-1];
    }
    

    吹气球 https://www.lintcode.com/problem/burst-balloons/description
    有n个气球,编号为0到n-1,每个气球都有一个分数,存在nums数组中。每次吹气球i可以得到的分数为 nums[left] * nums[i] * nums[right],left和right分别表示i气球相邻的两个气球。当i气球被吹爆后,其左右两气球即为相邻。要求吹爆所有气球,得到最多的分数。

    dp[i][j] 表示 区间[i,j]的都被打爆的最大收益
    那么 dp[i][j] = max(dp[i][k-1] + dp[k+1][j] + s[i-1] * s[k] * s[j+1])

    int maxCoins(vector<int>& nums) {
        int l = nums.size();
        int s[l+2];
        s[0] = 1, s[l+1] = 1;
        for(int i=0; i<l; i++)
            s[i+1] = nums[i];
        int dp[l+5][l+5] = {0};
        for(int i=1; i<=l; i++)
            dp[i][i] = s[i-1]*s[i]*s[i+1];
        for(int len=2; len<=l; len++) {
            for(int i=1; i+len-1<=l; i++) {
                int j = i+len-1;
                // [i.j]
                int mx = 0;
                for(int k=i; k<=j; k++) {
                    mx = max(mx, dp[i][k-1] + dp[k+1][j] + s[i-1] * s[k] * s[j+1]);
                }
                dp[i][j] = mx;
            }
        }
        return dp[1][l];
    }
    
  • 相关阅读:
    ubuntu下安装maven
    159.Longest Substring with At Most Two Distinct Characters
    156.Binary Tree Upside Down
    155.Min Stack
    154.Find Minimum in Rotated Sorted Array II
    153.Find Minimum in Rotated Sorted Array
    152.Maximum Product Subarray
    151.Reverse Words in a String
    150.Evaluate Reverse Polish Notation
    149.Max Points on a Line
  • 原文地址:https://www.cnblogs.com/Draymonder/p/10632489.html
Copyright © 2011-2022 走看看