zoukankan      html  css  js  c++  java
  • [bzoj1705] [Usaco2007 Nov]Telephone Wire 架设电话线

      正常DP。。

      f[i][j]表示前i个电线杆,把第i个电线杆高度改为j的最少总费用。设原来电线杆高度为h[]

      f[i][j]=min{

            f[i-1][k]+C*|j-k|+(j-h[i])^2,(k>=h[i-1],j>=h[i])

      }

      直接上的话复杂度是O(n*100*100)= =

      可以用两个数组存一下j不同取值时的k(两个数组:一个是k>=j的,另一个是k<=j的,j值改变的时候把这两个辅助数组也调一下就好了)。。具体见代码吧。。这样复杂度就是O(n*100)了

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 using namespace std;
     5 const int maxn=100023;
     6 int f[2][101],gpre[101],gaft[101],h[maxn];
     7 int i,j,k,n,m,ans,C,now,pre,tmp,mn,mx;
     8 int ra;char rx;
     9 inline int read(){
    10     rx=getchar();ra=0;
    11     while(rx<'0'||rx>'9')rx=getchar();
    12     while(rx>='0'&&rx<='9')ra*=10,ra+=rx-48,rx=getchar();return ra;
    13 }
    14 int main(){
    15     n=read();C=read();now=1;pre=0;mn=2333333;
    16     for(i=1;i<=n;i++)h[i]=read(),mn=min(mn,h[i]),mx=max(mx,h[i]);
    17     for(i=1;i<=n;i++){
    18         for(j=h[i];j<=mx;j++)f[now][j]=(j-h[i])*(j-h[i])+min(gpre[j],gaft[j]);
    19          
    20         for(tmp=j=h[i];j<=mx;j++)if(f[now][j]<f[now][tmp]+(j-tmp)*C)tmp=j,gpre[j]=f[now][j];
    21                                                  else gpre[j]=f[now][tmp]+(j-tmp)*C;
    22         memset(gpre,50,h[i]<<2);
    23         for(tmp=j=mx;j>=h[i];j--)if(f[now][j]<f[now][tmp]+(tmp-j)*C)tmp=j,gaft[j]=f[now][j];
    24                                                  else gaft[j]=f[now][tmp]+(tmp-j)*C;
    25         for(j=h[i]-1;j;j--)gaft[j]=f[now][tmp]+(tmp-j)*C;                                        
    26         swap(now,pre);
    27     }
    28     for(ans=f[pre][h[n]],i=h[n]+1;i<=mx;i++)if(f[pre][i]<ans)ans=f[pre][i];
    29     printf("%d
    ",ans);
    30     return 0;
    31 }
    View Code
  • 相关阅读:
    自动化运维 Expect
    C 语言Struct 实现运行类型识别 RTTI
    Mac 安装配置rz、sz
    Mac Vim + ctags 实现多目录跳转
    Mac 使用Sublime Text 3 搭建C开发环境
    this.$createElement用法
    判断一个数字在数组中出现次数
    iview的table:自定义table表格中列头的标题和点击事件(renderHeader)
    js计算不精确问题
    js 日期时间的格式化
  • 原文地址:https://www.cnblogs.com/czllgzmzl/p/5068259.html
Copyright © 2011-2022 走看看