Lightoj 1031 区间DP
来源:互联网 发布:淘宝客活动可以取消吗 编辑:程序博客网 时间:2024/05/16 19:47
这里 每次向下深入的时候通过 减掉 向下的DFS值来模拟交替取值!
而且注意 注释的地方!
dp[i][j]表示i-j之间两者取值的最大差值!
AC代码如下:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define MAX 0x3f3f3f3fint dp[101][101];int N;int sum[110];int DFS( int left, int right ){if( left > right ){return 0;}if( dp[left][right] != -MAX ){return dp[left][right];}dp[left][right] = sum[right] - sum[left-1];for( int i = left; i <= right; i++ ){dp[left][right] = max( dp[left][right], sum[i] - sum[left-1] - DFS( i + 1, right ) );dp[left][right] = max( dp[left][right], sum[right] - sum[i-1] - DFS( left, i-1 ) );//注意这里的i-1 用从左还是从右来包括i才能做到不重不漏}//而且 这里 每次都 通过 -DFS 来做到交替!!!return dp[left][right];}int main(){int T, Case = 1;cin >> T;while( T-- ){cin >> N;for( int i = 1; i <= N; i++ ){for( int j = 1; j <= N; j++ ){dp[i][j] = -MAX;}}for( int i = 1; i <= N; i++ ){cin >> sum[i];dp[i][i] = sum[i];}sum[0] = 0;for( int i = 1; i <= N; i++ ){sum[i] += sum[i-1];}cout << "Case " << Case++ << ": " << DFS( 1, N ) << endl;}return 0;}
- Lightoj 1031 区间DP
- Lightoj 1031(区间dp)
- lightoj 1031【区间DP】
- LightOJ-1031 博弈 区间DP
- LightOJ-1031-区间dp,dfs
- LightOJ - 1031 Easy Game(区间DP)
- LightOJ 1031 - Easy Game (区间dp)
- LightOJ 1031 Easy Game(区间DP)
- LightOJ 1031 - Easy Game【区间dp】
- lightoj 1031 - Easy Game 【区间dp】
- lightoj 1031 - Easy Game 【区间dp】
- lightoj 1031 Easy Game (区间dp 博弈)
- lightoj 1031 - Easy Game(区间DP)
- LightOJ 1031 Easy Game--区间dp
- lightoj 1422 区间DP
- lightoj 1422 区间dp
- Lightoj 1422 区间dp
- lightoj 1033 区间dp
- java/android的图片
- hdoj 1016 Prime Ring Problem 深搜回溯
- c#中 String和string的区别
- HDU 1312Red and Black(简单搜索 bfs或dfs)
- UIView大小缩放的动画效果函数
- Lightoj 1031 区间DP
- 验证身份证号码的计算方法
- 开源工具:DeepLearnToolbox
- 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- diff和sdiff使用心得
- [互联网面试笔试汇总C/C++-18] 生产者消费者模型
- 初识hibernate——基础与核心
- 一个简单的python socket编程
- 经典算法研究系列:九、图像特征提取与匹配之SIFT算法