1. 程式人生 > >ZOJ 3802 Easy 2048 Again(狀壓DP)

ZOJ 3802 Easy 2048 Again(狀壓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;
}


相關推薦

ZOJ 3802 Easy 2048 Again(DP)

一開始沒有想到加完之後的結果是可以直接加出來的,過程中的常數很高。 也完全沒有想到陣列開大會TLE,最後還是看了別人的程式碼對拍才用了滾動陣列。 總的來說  非常好的狀壓dp吧 #include &

ZOJ----3471Most powerful(簡單dp

題目 Most Powerful Time Limit: 2 Seconds Memory Limit: 65536 KB Recently, researchers on Mars have discovered N powerful atoms.

zoj 3471 Most Powerful dp

lin printf sta 最大 emp gpo return sizeof eof 題目鏈接 題意 \(N\)種氣體,\(i\)氣體與\(j\)氣體碰撞會: 產生\(a[i][j]\)的威力; 導致\(j\)氣體消失。 求產生威力之和的最大值。 思路 \(dp[st

zoj 3471 Most Powerful (有向圖)最大生成樹 dp

最大值 href != 氣體 state span 生成 long logs 題目鏈接 題意 \(N\)種氣體,\(i\)氣體與\(j\)氣體碰撞會: 產生\(a[i][j]\)的威力; 導致\(j\)氣體消失。 求產生威力之和的最大值。 思路 和前幾題找圖上路徑的題不

zoj 3777 dp || 二分+搜索

oid 矩陣 vector code print 上下 span 1的個數 c++ 題意:給一個矩陣(n*n n<=14)求出選擇矩陣不同行,不同列,最後加起來和大於m的選擇數 狀壓dp做法: 由於每一行都要選擇,那麽認為就是從第一行開始順序選擇 。那麽一個

DP】poj3254 Corn Fields

一行 cstring fields while state 條件 style 狀壓 () 題意: 一塊n*m的田,1表示這個地方可以種植,0代表這個地方不能種植。植物種植還必須滿足兩株植物不能相鄰(橫豎都不行)。問共有幾種種植方法,而且當什麽都不種時認為是一種方法。 解題思

【bzoj4145】[AMPPZ2014]The Prices dp

return std sin highlight string span 題目 狀態壓縮dp print 原文地址:http://www.cnblogs.com/GXZlegend/p/6832200.html 題目描述 你要購買m種物品各一件,一共有n家商店,你到第i家

DP入門——鋪磚塊

ont 輸出 fin load www ret mil times set 題目描述 現有n*m的一塊地板,需要用1*2的磚塊去鋪滿,中間不能留有空隙。問這樣方案有多少種 輸入 輸入n,m(1<=n, m<=11) 有多組輸入數據,以m=n=0結束

[LightOJ 1018]Brush (IV)[DP]

邊界 lightoj 計算 const 擁有 for ostream 當前 blank 題目鏈接:http://lightoj.com/volume_showproblem.php?problem=1018 題意分析:平面上有不超過N個點,如今能夠隨意方向劃直線將它們劃

SGU 223 little kings BSOJ2772 DP

而且 進制 print 剪枝 描述 計算機 tex 範圍 blog 1896 [SCOI2005]互不侵犯King 【問題描述】在n*n(1<=n<=10)的棋盤上放k(0<=k<=n*n)個國王(可攻擊相鄰的8 個格子),求使它們無法互相攻擊的方

POJ 3254 Corn Fields (DP)

sign inline con cout ont tor const put 方式 題意:給定一個n*m的01矩陣,然後求有多少種方式,在1上並且1不相鄰。 析:一個簡單的狀壓DP,dp[i][s] 表示 第 i 行狀態為 s 時有多少種,然後只要處理不相鄰就行了,比賽進位

HDU 4906 Our happy ending (DP)

中一 article san mar break std 多少 滾動 con HDU 4906 Our happy ending pid=4906" style="">題目鏈接 題意:給定n個數字,每一個數字能夠是0-l,要選當中一些數字。然後使得和

POJ 1185 炮兵陣地 (DP)

pre int fine clu mat 狀態 print 優化 ans 題意:中文題。 析:dp[i][s][t] 表示第 i 行狀態為 s, 第 i-1 行為 t,然後就很簡單了,但是要超內存,實際上狀態最多才60個,所以後兩維開60就好, 然後又超時間,就一直加優化,

[BZOJ 1076][SCOI2008]獎勵關(期望+Dp

方便 double spa solution bsp 所有 一個 int stream Description 你正在玩你最喜歡的電子遊戲,並且剛剛進入一個獎勵關。在這個獎勵關裏,系統將依次隨機拋出k次寶物, 每次你都可以選擇吃或者不吃(必須在拋出下一個寶物之前做出選

HDU 4856 Tunnels(BFS+DP

pid air san void hit uil set itl pair HDU 4856 Tunnels 題目鏈接 題意:給定一些管道。然後管道之間走是不用時間的,陸地上有障礙。陸地上走一步花費時間1,求遍歷全部管道須要的最短時間。每一個管道僅僅能走一次 思

男神的約會(dp)

alt pri sof cnblogs soft 每次 div src closed 有一天男神約了學姐姐去看電影,電影院有一個活動,給你一個10*10的矩陣,每一個格子上都有一個0-9的整數,表示一共十種優惠券中的一種。 觀眾從左上角的格子開始走,走到右下角。每走到一個

dp】CDOJ1608 暑假集訓

algo name pac 開始 技術分享 只需要 memset urn cnblogs 裸的狀壓的話,很顯然……但有一個強大的優化。 就是在枚舉決策的時候,固定第一個空位置。可以證明,這樣狀態數沒有減少,但是降低了很多重復訪問。 因為你在枚舉的時候,總是可以劃分為包含第

dp】互不侵犯KING

git algorithm long long true 求解 格子 ble bool span 互不侵犯KING Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3866 Solved: 2264[Submit][Sta

dp】送餐員

data etc 接下來 -s enter algorithm urn 我們 stream [odevs2800]送餐員 題目描述 Description 有一個送外賣的,他手上有n份訂單,他要把n份東西,分別送達n個不同的客戶的手上。n個不同的客戶分別在1~n

poj - 1185 炮兵陣地 DP 解題報告

其他 無法 popu mon 多少 mod tdi 遞推關系 r+ 炮兵陣地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 21553 Accepted: 8363