ZOJ 3802 Easy 2048 Again(状压DP)
2016-04-15 21:07
441 查看
一开始没有想到加完之后的结果是可以直接加出来的,过程中的常数很高。
也完全没有想到数组开大会TLE,最后还是看了别人的代码对拍才用了滚动数组。
总的来说 非常好的状压dp吧
也完全没有想到数组开大会TLE,最后还是看了别人的代码对拍才用了滚动数组。
总的来说 非常好的状压dp吧
#include <cstdio> #include <cstring> #include <algorithm> #include<iostream> #include<queue> #include<map> #include<cmath> using namespace std; const int maxn = 57; #define MAXN 100005 #define ll long long int dp[2][(1 << 14)]; int A[550]; int main() { int T; cin >> T; while (T--) { int n; cin >> n; memset(dp, -1, sizeof dp); for (int i = 1; i <= n; i++) { scanf("%d", &A[i]); } int pos = 1; int ans = 0; dp[0][0] = 0; for (int i = 1; i <= n; i++) { for (int j = 0; j<4096 * 2; j++) { if (dp[pos ^ 1][j] == -1) continue; dp[pos][j] = max(dp[pos][j], dp[pos ^ 1][j]); ans = max(ans, dp[pos][j]); int t = j; int q = A[i] - 1; int sum = A[i]; if ((t&q) == 0) { int k = A[i]; while ((t&k)) { sum += k << 1; k <<= 1; } t &= ~(k - 1); t |= k; } else t = A[i]; dp[pos][t] = max(dp[pos][t], dp[pos ^ 1][j] + sum); ans = max(ans, dp[pos][t]); } pos ^= 1; } printf("%d\n", ans); } return 0; }
相关文章推荐
- 通过按钮跳过SplashActivity(启动画面),延时自动跳过SplashActivity进入MainActivity
- 通过按钮跳过SplashActivity(启动画面),延时自动跳过SplashActivity进入MainActivity
- Light OJ 1296 - Again Stone Game (博弈sg函数递推)
- UVA 10651 Pebble Solitaire
- Training Deep Neural Networks
- Leetcode题解 217. Contains Duplicate
- CPaintDC、CClientDC、CWindowDC和CMetaFileDC类的主要特点及区别
- 进行删除文件操作时碰到错误:open failed: EBUSY (Device or resource busy)
- saiku执行速度慢
- saiku执行速度慢
- 服务器知识:RAID技术图解
- spark 源码里面的sealed trait 存在原因
- 172. Factorial Trailing Zeroes
- 浅谈RAII&智能指针
- UVA_10245_ The Closest Pair Problem
- 调用http://apistore.baidu.com网站的接口
- a、button、input点击出现蓝色边框,如何去掉
- codeforces 652C C. Foe Pairs(尺取法+线段树查询一个区间覆盖线段)
- 进程控制开发[fork() exec exit _exit wait waitpid 守护进程]
- 219. Contains Duplicate II