zoukankan      html  css  js  c++  java
  • CF1312E 区间DP

    读完之后知道应该是区间DP(复杂度很适合,而且模型也像)但是想不出怎么同时处理合并和长度最小的问题。

    想了很久还是没什么想法,然后去看了题解,其实就开两个DP数组同步做,同时处理l,r之间合并后的数字以及期间的最小长度就行了。

    具体代码如下:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int INF=0X3f3f3f3f;
     4 int dp[505][505],num[505][505],a[505],n;
     5 int main(){
     6     memset(dp,INF,sizeof(dp));
     7     scanf("%d",&n);
     8     for (int i=1; i<=n; i++){
     9         scanf("%d",&a[i]);
    10         dp[i][i]=1;
    11         num[i][i]=a[i];
    12     }
    13     for (int len=2; len<=n; len++){
    14         for (int l=1; l+len-1<=n; l++){
    15             int r=l+len-1;
    16             for (int k=l; k<r; k++){
    17                 if (dp[l][k]==1 && dp[k+1][r]==1 && num[l][k]==num[k+1][r]){
    18                     dp[l][r]=1;
    19                     num[l][r]=num[l][k]+1;    
    20                 }
    21                 dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+1][r]);
    22             }
    23         }
    24     }
    25     printf("%d",dp[1][n]);
    26 }
    View Code
  • 相关阅读:
    数据表管理admin
    HDU 5057
    HDU 5056
    HDU 6035(树形dp)
    CodeForces 586D
    Codeforces 940D
    CodeForces 820C
    TOJ4114(活用树状数组)
    2017CCPC中南地区赛 H题(最长路)
    CodeForces 544C (Writing Code)(dp,完全背包)
  • 原文地址:https://www.cnblogs.com/i-caigou-TT/p/14052758.html
Copyright © 2011-2022 走看看