hdu5115(区间dp)

news/2024/11/29 17:28:31/

链接:点击打开链接

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

代码:

#include<stdio.h>
#include<cstring>
#include<iostream>
using namespace std;
const long long INF=0x3f3f3f3f3f3f3f3f;
long long a[205],b[205],dp[205][205];
int main(){long long t,n,i,j,k,l,cas;scanf("%I64d",&t);for(cas=1;cas<=t;cas++){scanf("%I64d",&n);for(i=1;i<=n;i++)for(j=1;j<=n;j++)dp[i][j]=INF;for(i=1;i<=n;i++)scanf("%I64d",&a[i]);for(i=1;i<=n;i++)scanf("%I64d",&b[i]);for(i=1;i<=n;i++)dp[i][i]=a[i]+b[i-1]+b[i+1];for(i=1;i<n;i++){                       dp[i][i+1]=min(dp[i][i+1],a[i]+b[i-1]+b[i+1]+a[i+1]+b[i-1]+b[i+2]);dp[i][i+1]=min(dp[i][i+1],a[i+1]+b[i]+b[i+2]+a[i]+b[i-1]+b[i+2]);}for(l=3;l<=n;l++){                      //遍历所有的顺序,也就是分成for(i=1;i<=n-l+1;i++){              //三部分后的顺序j=i+l-1;                        dp[i][j]=min(dp[i][j],dp[i][i]+dp[i+1][j]-b[i]+b[i-1]);dp[i][j]=min(dp[i][j],dp[i][i]+dp[i+1][j]-b[i+1]+b[j+1]);dp[i][j]=min(dp[i][j],dp[i][j-1]+dp[j][j]-b[j-1]+b[i-1]);dp[i][j]=min(dp[i][j],dp[i][j-1]+dp[j][j]-b[j]+b[j+1]);for(k=i+1;k<=j-1;k++){          //其实可以把k当作最后一个被攻击的目标也就不用这么麻烦了dp[i][j]=min(dp[i][j],dp[i][k-1]+dp[k][k]+dp[k+1][j]-b[k-1]+b[i-1]-b[k]+b[i-1]);dp[i][j]=min(dp[i][j],dp[i][k-1]+dp[k][k]+dp[k+1][j]-b[k-1]-b[k+1]+b[i-1]+b[j+1]);dp[i][j]=min(dp[i][j],dp[i][k-1]+dp[k][k]+dp[k+1][j]-b[k]+b[k+1]-b[k]+b[i-1]);dp[i][j]=min(dp[i][j],dp[i][k-1]+dp[k][k]+dp[k+1][j]-b[k]-b[k]+b[k-1]+b[j+1]);dp[i][j]=min(dp[i][j],dp[i][k-1]+dp[k][k]+dp[k+1][j]-b[k+1]-b[k-1]+b[i-1]+b[j+1]);dp[i][j]=min(dp[i][j],dp[i][k-1]+dp[k][k]+dp[k+1][j]-b[k+1]-b[k]+b[j+1]+b[j+1]);}}}printf("Case #%I64d: %I64d\n",cas,dp[1][n]);}return 0;
}


http://www.ppmy.cn/news/112792.html

相关文章

HDU-5115-区间DP

https://vjudge.net/problem/HDU-5115 一群狼&#xff0c;他的攻击力等于本身的攻击力加上旁边的攻击力&#xff08;若是两边就只加一个&#xff09;&#xff0c;当把他杀掉之后&#xff0c;他本身的附加攻击力都会消失&#xff0c;问你最小的代价&#xff08;杀了一只狼就要承…

HDU5115 区间dp

题意 思路&#xff1a; length less~larger dp[i][j] min(dp[i][j],dp[i][k - 1] dp[k 1][j] a[k] b[i - 1] b[j 1]); qaq看注释吧 ACcode #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<string…

HDU 5115 Dire Wolf(区间dp)

目录 问题概述4维状态设计分析代码 2维状态设计分析代码 随机序 ⇒ \Rightarrow ⇒ 区间序 ⇒ \Rightarrow ⇒ dfs序随机序区间序dfs序 问题 HDU 5115 Dire Wolf - https://acm.hdu.edu.cn/showproblem.php?pid5115 概述 方法&#xff1a;区间dp对于一个区间 [ l &#…

hdu5115

传送门&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid5115 题意&#xff1a;有一些狼&#xff0c;从左到右排列&#xff0c;每只狼有一个伤害A&#xff0c;还有一个伤害B。杀死一只狼的时候&#xff0c;会受到这只狼的伤害A和这只狼两边的狼的伤害B的和。若两只狼之间…

hdu 5115

太弱了打了一年这种题还做不出来。。。 dp[i][j] min(dp[i][j],dp[i][k-1]dp[k1][j]a[k]b[i-1]b[j1]) k:i->j; dp[i][k-1]dp[k1][j]a[k]b[i-1]b[j1] 的理解是先把k左边的区间消掉再把k右边的点消掉&#xff0c;最后消灭k&#xff0c;当消灭k时因为两边都没了所以受i-1和j…

HDU - 5115

题目链接&#xff1a;HDU - 5115 不难看出可以区间dp&#xff0c;不过有一些小技巧。 假设当前第一个攻击的区间为【l&#xff0c;r】&#xff0c;这个区间最后死的狼是k&#xff0c;那么就很好转移了。如果枚举第一个死的狼&#xff0c;不好转移。 AC代码&#xff1a; #prag…

HDOJ5115

最近作死的新开一个群每天一个ab&#xff0c;群主是不是得坚持下来呢&#xff0c;感谢群巨的鼓励和支持&#xff0c;一起加油 区间DP&#xff1a;HDOJ5115 区间DP特点总结&#xff1a; 数据量小&#xff0c;n一般在100&#xff0c;200左右&#xff0c;因为一般需要三个循环&a…

docker都有那些工具,及工具面试题

docker介绍 Docker 是一种开源的容器化平台&#xff0c;可以帮助开发者将应用程序和依赖项打包到轻量级的容器中&#xff0c;然后部署到任何基于 Linux 的操作系统中。使用 Docker 可以大大简化开发、部署和管理应用程序的过程&#xff0c;使其更加快速、灵活和可靠。 Docker…