zoukankan      html  css  js  c++  java
  • Cutting Sticks UVA

    题解:dp[ i ][ j ]=min { dp[ i ][ k ]+dp[ k ][ j ] }+a[ j ]-a [i ]。

    和石子归并是一样的问题,枚举区间的长度,然后更新这个区间的值。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 #define INF 1e8
     6 using namespace std;
     7 
     8 int n,L;
     9 int a[50],dp[50][50];
    10 
    11 void solve()
    12 {   for(int i=0;i<=n;i++) dp[i][i+1]=0;
    13     for(int len=2;len<=n+1;len++){
    14         for(int i=0;i+len<=n+1;i++){
    15             int j=len+i;
    16             for(int k=i+1;k<j;k++) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
    17             dp[i][j]+=a[j]-a[i];
    18         } 
    19     }
    20     
    21     printf("The minimum cutting is %d.
    ",dp[0][n+1]);
    22 }
    23 
    24 int main()
    25 {    while(cin>>L&&L){
    26         cin>>n;
    27         for(int i=1;i<=n;i++) cin>>a[i];
    28         a[0]=0,a[n+1]=L;
    29         memset(dp,0x3f,sizeof(dp));
    30         solve();
    31     }
    32     return 0;
    33 }
  • 相关阅读:
    函数的扩展
    数组的扩展
    event(1)
    面试
    iframes
    浏览器CSS兼容
    BFC
    简单的一个轮播效果
    asp.net identity 2.2.0 在WebForm下的角色启用和基本使用(二)
    我的web框架设计
  • 原文地址:https://www.cnblogs.com/zgglj-com/p/7298904.html
Copyright © 2011-2022 走看看