hdu5115 Dire Wolf

本文介绍了一种使用区间动态规划方法解决特定问题的算法实现。该问题旨在找到杀掉一定范围内所有狼所需的最小代价,通过枚举最后击杀的目标并利用动态规划计算最优解。代码采用C++编写,实现了递归函数来求解每个子问题。

题目链接

区间DP

$dp_{i,j}$为杀掉$i~j$内的狼的最小代价

枚举$i~j$中最后杀掉的狼,$dp_{i,j}=min\{ { {k\in{[i,j]}} | dp_{i,k-1}+dp_{k+1,j}+A_k+B_{i-1}+B_{j+1}} \}$

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #define re(i,l,r) for(int i=(l);i<=(r);i++)
 6 #define rre(i,r,l) for(int i=(r);i>=(l);i--)
 7 using namespace std;
 8 typedef long long LL;
 9 int t,A[222],B[222],n;
10 LL hh[222][222];
11 LL dfs(int l,int r)
12 {
13     LL &ret=hh[l][r];
14     if(ret)return ret;
15     ret=1LL<<60;
16     if(l>r)return ret=0;LL now=B[l-1]+B[r+1];
17     re(i,l,r)ret=min(dfs(l,i-1)+dfs(i+1,r)+A[i]+now,ret);
18     return ret;
19 }
20 int main()
21 {
22     scanf("%d",&t);int tt=t;
23     while(t--)
24     {
25         printf("Case #%d: ",tt-t);
26         memset(hh,0,sizeof(hh));
27         scanf("%d",&n);
28         re(i,1,n)scanf("%d",&A[i]);
29         re(i,1,n)scanf("%d",&B[i]);
30         printf("%lld\n",dfs(1,n));
31     }
32     return 0;
33 }

 

转载于:https://www.cnblogs.com/HugeGun/p/5339987.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值