【DP】 ZOJ 3802 Easy 2048 Again
2014-09-02 17:27
483 查看
这道题简直不能忍。。。如果不用滚动数组初始化memset会超时。。改for就行了。。出题人写的是滚动数组。。这样卡初始化简直不能忍。。。
#include <iostream> #include <queue> #include <stack> #include <map> #include <set> #include <bitset> #include <cstdio> #include <algorithm> #include <cstring> #include <climits> #include <cstdlib> #include <cmath> #include <time.h> #define maxn 505 #define maxm 40005 #define eps 1e-10 #define mod 1000000007 #define INF 999999999 #define lowbit(x) (x&(-x)) #define mp mark_pair #define ls o<<1 #define rs o<<1 | 1 #define lson o<<1, L, mid #define rson o<<1 | 1, mid+1, R typedef long long LL; //typedef int LL; using namespace std; LL powmod(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base%mod;base=base*base%mod;b/=2;}return res;} void scanf(int &__x){__x=0;char __ch=getchar();while(__ch==' '||__ch=='\n')__ch=getchar();while(__ch>='0'&&__ch<='9')__x=__x*10+__ch-'0',__ch = getchar();} LL gcd(LL _a, LL _b){if(!_b) return _a;else return gcd(_b, _a%_b);} // head int num[maxn]; int dp[maxn][10000]; int n; void read(void) { scanf("%d", &n); for(int i = 1; i <= n; i++) scanf("%d", &num[i]); } void work(void) { for(int i = 0; i <= n; i++) for(int j = 0; j < (1<<13); j++) dp[i][j] = -1; dp[0][0] = 0; for(int i = 0; i < n; i++) for(int j = 0; j < (1<<13); j++) { if(dp[i][j] == -1) continue; dp[i+1][j] = max(dp[i+1][j], dp[i][j]); int tmp = num[i+1]-1; if(tmp & j) dp[i+1][num[i+1]] = max(dp[i+1][num[i+1]], dp[i][j] + num[i+1]); else if(num[i+1] & j) { int res = 0, t = num[i+1]; while(t & j) t <<= 1, res += t; dp[i+1][num[i+1] + j] = max(dp[i+1][num[i+1] + j], dp[i][j] + num[i+1] + res); } else dp[i+1][num[i+1] + j] = max(dp[i+1][num[i+1] + j], dp[i][j] + num[i+1]); } int ans = 0; for(int i = 0; i < (1<<13); i++) ans = max(ans, dp [i]); printf("%d\n", ans); } int main(void) { int _; while(scanf("%d", &_)!=EOF) { while(_--) { read(); work(); } } return 0; }
相关文章推荐
- ZOJ-3802-Easy 2048 Again【状态压缩dp】【位运算】【好题】
- ZOJ 3802 Easy 2048 Again(简单DP)
- ZOJ3802 Easy 2048 Again (状压DP)
- ZOJ 3802 Easy 2048 Again(压缩dp)
- ZOJ 3802 Easy 2048 Again(状压DP)
- Easy 2048 Again - ZOJ 3802 像缩进dp
- ZOJ 3802 Easy 2048 Again(状压dp)
- ZOJ 3802 Easy 2048 Again 状压DP
- ZOJ-3802:Easy 2048 Again(2048游戏 状态压缩dp)
- ZOJ 3802 Easy 2048 Again 状态压缩dp
- zoj 3802 Easy 2048 Again(状压DP)
- ZOJ 3802 Easy 2048 Again 状态DP
- ZOJ 3802 Easy 2048 Again(状压DP+位运算)【一维状压类模板--2048】
- Easy 2048 Again - ZOJ 3802 状压dp
- ZOJ -- 3802 Easy 2048 Again(状压dp)
- ZOJ 3802 Easy 2048 Again 像缩进DP
- [zoj 3802]Easy 2048 Again 状压DP
- ZOJ:3802 Easy 2048 Again (状态压缩)
- zoj 3802 Easy 2048 Again (动态规划)
- zoj-3802-Easy 2048 Again