zoukankan      html  css  js  c++  java
  • HDU 5115 Dire Wolf

    【题意概述】

      有n只狼要杀,杀每只狼的代价是它的攻击值加上它相邻的存活的狼的附加值。求最小的代价。

    【题解】

      区间DP.

      设f[i][j]为杀掉i~j的狼的最小代价,可以推出状态转移方程为f[i][j]=min(f[i][k]+f[k+1][j]+a[k]+b[i-1]+b[j+1]),枚举区间长度,起点和中间点即可转移。

      复杂度n三方。

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 #define LL long long
     5 #define rg register
     6 #define N 300
     7 using namespace std;
     8 int n,T,t,a[N],b[N],f[N][N];
     9 inline int read(){
    10     int k=0,f=1; char c=getchar();
    11     while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
    12     while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
    13     return k*f;
    14 }
    15 inline void Pre(){
    16     for(rg int i=1;i<=n;i++)
    17         for(rg int j=i;j<=n;j++) f[i][j]=1e9;
    18 }
    19 int main(){
    20     T=t=read();
    21     while(t--){
    22         n=read(); Pre();
    23         for(rg int i=1;i<=n;i++) a[i]=read();
    24         for(rg int i=1;i<=n;i++) b[i]=read();
    25         for(rg int l=0;l<=n;l++){
    26             for(rg int i=1;i+l-1<=n;i++){
    27                 int j=i+l-1;
    28                 for(rg int k=i;k<=j;k++) f[i][j]=min(f[i][j],f[i][k-1]+f[k+1][j]+a[k]+b[i-1]+b[j+1]);
    29             }
    30         }
    31         printf("Case #%d: %d
    ",T-t,f[1][n]);
    32     }
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    Asp.Net开发小技巧汇总
    .net缓存
    C# .Net 2.0实例学习:WebBrowser页面与WinForm交互技巧(二)
    字符和数组
    jvm调优原则
    ASP.NET页面刷新的实现方法
    js禁止右键和复制功能
    动态定义SL DataGrid Columns [转]
    DataGrid 内嵌ComboBox动态数据联动
    C#对象序列化(2)
  • 原文地址:https://www.cnblogs.com/DriverLao/p/9457502.html
Copyright © 2011-2022 走看看