• hdu 5115


    题意:有一排狼,攻击某只狼狼会受到这只狼的伤害a[i],和周围狼的伤害b[i-1]+b[i+1],然后问你消灭这一排狼,最少受到多少伤害

    思路:dp[i][j]表示消灭i-j这些狼所受最少伤害,dp[i][j]=min(dp[i][j],dp[i][k-1]+dp[k+1][j]+a[k]+b[i-1]+b[j+1])

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int inf=1e9+7;
     4 
     5 int a[300],b[300];
     6 int dp[300][300];
     7 
     8 int main(){
     9     int t;
    10     int tt=1;
    11     scanf("%d",&t);
    12     while(t--){
    13         int n;
    14         scanf("%d",&n);
    15         for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    16         for(int i=1;i<=n;i++) scanf("%d",&b[i]);
    17         b[0]=0;b[n+1]=0;
    18         for(int i=1;i<=n;i++){
    19             for(int j=i;j<=n;j++){
    20                 if(i==j) dp[i][i]=a[i]+b[i-1]+b[i+1];
    21                 else dp[i][j]=inf;
    22             }
    23         }
    24         for(int i=1;i<=n;i++){
    25             for(int l=1;l<=n;l++){
    26                 int r=i+l;
    27                 if(r>n) break;
    28                 for(int k=l;k<=r;k++){
    29                     dp[l][r]=min(dp[l][r],dp[l][k-1]+dp[k+1][r]+a[k]+b[l-1]+b[r+1]);
    30                 }
    31             }
    32         }
    33         /*
    34         for(int i=1;i<=n;i++){
    35             for(int j=i;j<=n;j++){
    36                 cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
    37             }
    38         }
    39         */
    40         printf("Case #%d: ",tt++);
    41         cout<<dp[1][n]<<endl;
    42     }
    43 }
  • 相关阅读:
    并发和并行的区别
    fiddler-打断点(bpu)
    fiddler操作
    fiddler手机抓包
    面试题1
    Linux查看日志常用命令
    HTMLTestRunner
    mysql数据库无法插入特殊字符报错
    mybatis解决属性名和数据库字段名不一致问题
    Vue路由的使用简单实例
  • 原文地址:https://www.cnblogs.com/hhxj/p/7189878.html
Copyright © 2020-2023  润新知