hdu4597Play Game(记忆化)
通化邀请赛的题 貌似不怎么难
记忆化DP 状态方程类似于2维的 只是变成了4维 每次有四种方向去搜 取最棒的
判断好边界条件
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
int p1[],p2[],sum1[],sum2[];
int dp[][][][];
int dfs(int i1,int j1,int i2,int j2)
{
if(dp[i1][j1][i2][j2]!=-)
return dp[i1][j1][i2][j2];
if(i1>j1&&i2>j2)
return dp[i1][j1][i2][j2] = ;
int d1=,d2=,d3=,d4=;
int s1 = sum1[j1]-sum1[i1-];
int s2 = sum2[j2]-sum2[i2-];
if(i1<=j1)
{
d1 = s2+sum1[j1-]-sum1[i1-]-dfs(i1,j1-,i2,j2)+p1[j1];
d2 = s2+sum1[j1]-sum1[i1]-dfs(i1+,j1,i2,j2)+p1[i1];
}
if(i2<=j2)
{
d3 = s1+sum2[j2-]-sum2[i2-]-dfs(i1,j1,i2,j2-)+p2[j2];
d4 = s1+sum2[j2]-sum2[i2]-dfs(i1,j1,i2+,j2)+p2[i2];
}
dp[i1][j1][i2][j2] = max(max(d1,d2),max(d3,d4));
return dp[i1][j1][i2][j2];
}
int main()
{
int i,n,t;
scanf("%d",&t);
while(t--)
{
cin>>n;
memset(sum1,,sizeof(sum1));
memset(sum2,,sizeof(sum2));
memset(dp,-,sizeof(dp));
for(i = ; i <= n ;i++)
{
scanf("%d",&p1[i]);
sum1[i] = sum1[i-]+p1[i];
}
for(i = ; i<= n ; i++)
{
scanf("%d",&p2[i]);
sum2[i] = sum2[i-]+p2[i];
}
int ans = dfs(,n,,n);
cout<<ans<<endl;
}
return ;
}
hdu4597Play Game(记忆化)的更多相关文章
- *HDU1142 最短路+记忆化dfs
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索
1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...
- 【BZOJ-3895】取石子 记忆化搜索 + 博弈
3895: 取石子 Time Limit: 1 Sec Memory Limit: 512 MBSubmit: 263 Solved: 127[Submit][Status][Discuss] D ...
- hdu3555 Bomb (记忆化搜索 数位DP)
http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others) Memory ...
- Codeforces Round #174 (Div. 1) B. Cow Program(dp + 记忆化)
题目链接:http://codeforces.com/contest/283/problem/B 思路: dp[now][flag]表示现在在位置now,flag表示是接下来要做的步骤,然后根据题意记 ...
- hdu 4826(dp + 记忆化搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4826 思路:dp[x][y][d]表示从方向到达点(x,y)所能得到的最大值,然后就是记忆化了. #i ...
- zoj 3644(dp + 记忆化搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 思路:dp[i][j]表示当前节点在i,分数为j的路径条数,从 ...
- loj 1044(dp+记忆化搜索)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26764 思路:dp[pos]表示0-pos这段字符串最少分割的回文 ...
- DP(记忆化搜索) + AC自动机 LA 4126 Password Suspects
题目传送门 题意:训练指南P250 分析:DFS记忆化搜索,范围或者说是图是已知的字串构成的自动机图,那么用 | (1 << i)表示包含第i个字串,如果长度为len,且st == (1 ...
随机推荐
- IOS- 最简单的反向传值- block
block 常用于反向传值 声明 返回值类型 (^block)(参数列表) 调用 闭包的名字=^(参数列表){}: 闭包的名字(): 如: void(^aaaaa)(int num,NSString ...
- 移动前端开发之viewport的深入理解(转载)
本文为转载文章,原文网址:http://www.cnblogs.com/2050/p/3877280.html 在移动设备上进行网页的重构或开发,首先得搞明白的就是移动设备上的viewport了,只有 ...
- Java实战之03Spring-04Spring的数据库访问
四.Spring的数据库访问 1.DAO模式 /** * 抽取的一个类 * @author zhy * */ public class JdbcDaoSupport { private QueryRu ...
- 02_线程的创建和启动_继承Thread方式
[简述] java使用Thread类代表线程,所有的线程都必须是Thread或者其子类的实例. 每个线程的任务就是完成一定的任务,实际上就是执行一段程序流. [创建并启动多线程的步骤(集成Thread ...
- PHOTOSHOP 制作虚线和实线
1.制作实线可以直接用直线工具,选择合适的粗细大小. 2. 制作虚线首先要用钢笔或者绘图工具画出所需要的形状,如弧线,圆形等等 然后在路径面板中用画笔描边,画笔需要提前设置好粗细和间距,用方形 ...
- 进程,线程(thread)
每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.进程也可能是整个程序或者是部分程序的动态执行.线程是一组指令的集合,或者是程序的特殊段, 它可以在程序里独立执行.也可把它理解为代码运行 ...
- memcached一些整理
.NET中使用Memcached的相关资源整理 Memcached官方站点:http://www.danga.com/memcached/ Memcached Win32 1.2.6下载: ...
- sae-多个file_put_contents('saestor://public/text.txt',$data);只写第一次
多个file_put_contents('saestor://public/text.txt',$data); 只执行第一个文件的写入,永久存储也只需要一次写入 如果需要用户中间缓存文件,用tmpfs ...
- Chrome远程调试Android上Chrome的页面
下载最新的google chrome canary 手机chrome开启usb网页调试,如图所示: 在终端运行 ? SHELL adb forward tcp:9222 localabstract:c ...
- python上下文管理器及with语句
with语句支持在一个叫上下文管理器的对象的控制下执行一系列语句,语法大概如下: with context as var: statements 其中的context必须是个上下文管理器,它实现了两个 ...