hdu 5115 Dire Wolf 恐狼先锋
来源:互联网 发布:出租房网络经常掉线 编辑:程序博客网 时间:2024/06/02 12:55
题目含义:有200头狼站成一排,每一头狼有一个自身攻击力a[i],和一个buff(使得左右攻击力提升b[i]),决定一个杀死狼的顺序,使得自身受到伤害值最小。
恐狼先锋!!!!
合并类DP,f[i,j]代表消灭【i,j】区间内的最小消耗,
f[i,j] = f[i,k-1] + f[k+1,j] + a[k] + b[i-1] + b[j+1]; //k为枚举的【i,j】区间内最后杀死的狼。
代码如下:
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int N = 200+10;const int inf = 1000000000;int a[N];int b[N];int f[N][N];int dfs(int i,int j){ if(j<i) return 0; if(f[i][j]!=-1) return f[i][j]; if(i==j) return f[i][j]=a[i]+b[i-1]+b[j+1]; int ans = inf; for(int k = i;k<=j;k++) { ans = min(ans,dfs(i,k-1)+dfs(k+1,j)+a[k]+b[i-1]+b[j+1]); } return f[i][j] = ans;}int main(){ int t,cas=0; cin>>t; while(t--) { cas++; int n; scanf("%d",&n); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(f,-1,sizeof(f)); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) scanf("%d",&b[i]); int ans = dfs(1,n); printf("Case #%d: %d\n",cas,ans); } return 0;}
0 0
- hdu 5115 Dire Wolf 恐狼先锋
- HDU 5115 Dire Wolf
- HDU 5115 Dire Wolf
- HDU 5115 Dire Wolf
- HDU 5115 Dire Wolf
- hdu 5115 Dire Wolf
- HDU-5115 Dire Wolf
- HDU 5115--Dire Wolf
- 【DP】 HDU 5115 Dire Wolf 区间DP
- hdu 5115 Dire Wolf 区间DP
- hdu 5115 Dire Wolf (区间DP)
- HDU 5115 Dire Wolf (区间DP)
- HDU 5115 Dire Wolf(记忆化搜索)
- hdu 5115 Dire Wolf(区间DP)
- hdu 5115 Dire Wolf(DP进阶)
- HDU 5115Dire Wolf(区间dp)
- hdu 5115 Dire Wolf【区间DP】
- HDU 5115 Dire Wolf(区间DP)
- 打开文档文件的处理过程和函数
- 位运算实现四则运算
- 关于Spring之AOP的一些认识
- 仿ActionBar overflow溢出,竖线菜单效果
- 网络用语禁上电视
- hdu 5115 Dire Wolf 恐狼先锋
- Redis基础介绍及安装示例
- android之simpleAdaper应用
- P、NP、NPC和NP-hard问题的理解
- Android初学之自定义土司
- A + B Again
- Linux从程序到进程
- 第13周项目5(2)复制字符串
- UILabel基本使用方法