zoukankan      html  css  js  c++  java
  • Dire Wolf ---hdu5115(区间dp)

     题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5115

    题意:有一排狼,每只狼有一个伤害A,还有一个伤害B。杀死一只狼的时候,会受到这只狼的伤害A和这只狼两边的狼的伤害B的和。如果某位置的狼被杀,那么杀它左边的狼时就会收到来自右边狼的B,因为这两只狼是相邻的了。求杀掉一排狼的最小代价。

    样例解释:

    n   = 3

    A[] = 3 5 7

    B[] = 8 2 0

    一共有3只狼,第一次杀掉第一只狼,代价为A[1]+B[2] = 3+2 = 5 (B和A相邻),只剩下第二只狼和第三只狼了,

    所以杀掉第二只狼的代价为A[2]+B[3] = 5+0 = 5; 最后剩下一只狼了,代价为A[3] = 7,总代价为5+5+7 = 17;

     
    解法:设dp[i][j]为消灭编号从i到j只狼的代价,那么结果就是dp[1][n]
        枚举k作为最后一只被杀死的狼,此时会受到a[k]和b[i-1] b[j+1]的伤害 取最小的即可
     
    可列出转移方程:dp[i][j]=min(dp[i][j], dp[i][k-1]+dp[k+1][j]+a[k]+b[i-1]+b[j+1])
            dp[i][i]=a[i]+b[i-1]+b[j+1];

     

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    #define N 220
    #define INF 0xfffffff
    
    int main()
    {
        int T, n, a[N], b[N], dp[N][N], t=1;
        scanf("%d", &T);
        while(T--)
        {
            memset(a, 0, sizeof(a));
            memset(b, 0, sizeof(b));
            scanf("%d", &n);
            for(int i=1; i<=n; i++)
                scanf("%d", &a[i]);
            for(int i=1; i<=n; i++)
                scanf("%d", &b[i]);
            for(int i=1; i<=n; i++)
            {
                for(int j=i; j<=n; j++)
                    dp[i][j]=INF;
         ///       dp[i][i]=a[i]+b[i-1]+b[i+1];
            }
            for(int l=0; l<=n; l++)
            {
                for(int i=1; i+l<=n; i++)
                {
                    int j=i+l;
                    for(int k=i; k<=j; k++)
                    {
                        dp[i][j]=min(dp[i][j], dp[i][k-1]+dp[k+1][j]+a[k]+b[i-1]+b[j+1]);
                    }
                }
            }
            printf("Case #%d: %d
    ", t++, dp[1][n]);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    h5 拍照上传 代码
    java jdbc 链接本地mysql数据库 报错 Access denied for user 'root'@'localhost' (using password: YES)
    react.js 中对props 的理解
    react.js 如何 设置页面div 背景图片
    关于Vue.js 和 react.js 的异同
    如何用 npm ,搭建react 项目
    如何进行vue vux版本更新
    js 继承 函数
    absolute 和 z-index妙用
    关于 white-space: pre-wrap;的灵异现象
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/4952759.html
Copyright © 2011-2022 走看看