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
  • 相关阅读:
    struts1.X的jar包
    struts2.1.6所需jar包详解
    hibernate的运行原理
    hibernate的save()方法详解
    flash的动态加载技术
    havok之内存管理
    worker中加载本地文件报错的解决方案
    行为树之我见
    havok之thread和memory system
    havok之collision detection
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/4952759.html
Copyright © 2011-2022 走看看