DP ACdream 喵哈哈村的挑衅
2015-08-05 15:59
381 查看
心塞,记忆化搜索教做人,第一次见
写了一早上的dp,都没把转移方程写对
写了一早上的dp,都没把转移方程写对
/******************************************** Author :Crystal Created Time : File Name : ********************************************/ #include <cstdio> #include <cstdlib> #include <iostream> #include <algorithm> #include <cstring> #include <climits> #include <string> #include <vector> #include <cmath> #include <stack> #include <queue> #include <set> #include <map> using namespace std; int a[30]; int sa[30]; int sb[30]; int b[30]; int dp[30][30][30][30]; int nmin = 0; int dfs(int x,int y,int u,int v){ //记忆化搜索 if(dp[x][y][u][v]>=0)return dp[x][y][u][v]; int sum = 0; int ret = 0; if(x <= y)sum += sa[y]-sa[x-1]; if(u <= v)sum += sb[v]-sb[u-1]; if(x<=y)ret = max(ret,sum - min(dfs(x+1,y,u,v),dfs(x,y-1,u,v))); if(u<=v)ret = max(ret,sum - min(dfs(x,y,u+1,v),dfs(x,y,u,v-1))); return dp[x][y][u][v] = ret;//返回当前的值 } int main() { int n; while(scanf("%d",&n) != EOF){ memset(dp,-1,sizeof dp); for(int i=1;i<=n;i++)cin >> a[i]; for(int i=1;i<=n;i++)cin >> b[i]; for(int i=1;i<=n;i++){ sa[i]=sa[i-1]+a[i]; sb[i]=sb[i-1]+b[i]; } nmin = dfs(1,n,1,n); cout << nmin << endl; } return 0; }
相关文章推荐
- android 自定义ScrollView实现背景图片伸缩(阻尼效果)
- ios基础-字符串和数组的block遍历
- LeetCode之Binary Tree Inorder Traversal
- 使用php-java-bridge让PHP5支持java
- C#高级编程七十一天----DLR ScriptRuntime
- Hadoop集群(第9期)_MapReduce初级案例
- android 自定义ScrollView实现背景图片伸缩(阻尼效果)
- ListView,图片,两行内容
- opentsdb
- 程序人生成长发展中的一些感悟
- 关于相对路径
- C# 调用 C++ 写的Dll 遇到的问题(调用DLL 自动退出)
- go项目make
- Windows API CreateEvent函数用法
- eclipse+ EPIC + PadWalker 搭建Windows Perl开发环境
- 判断app是在前台还是后台
- Python中eval带来的潜在风险
- HBase简介(很好的梳理资料)
- css 画基本图形
- 按钮,alert,EditText