sgu225 裝壓DP 位運算

2021-06-09 11:35:57 字數 891 閱讀 6053

題意是:給出乙個 n*n 的棋盤 ,問放置 k 的 騎士 相當於 象棋中的馬  有多少中放置方法。。。

n等於10 是tle ,於是 n=10 打表

用 dfs寫的 ,執行時間長,但**簡單。。 

開陣列時 用到滾動陣列。。。 

由於攻擊範圍是 兩行 ,所以 是在三行之間做dp ,每種狀態表示兩行 ,這樣上下三行之間的關係就兩種狀態直接的關係。。

相當於  f[ i ] [ j ] = opt(f[ j ][ t ]);

此題由於兩行之間會攻擊, 所以兩行狀態 合成一中狀態時 (就是用最長二十位 的數來表示兩行狀態,10 位 表示 一行),合法的狀態數 就會減少。。 可以預處理出所有合法狀態。。。。

#include #include #include #define ll long long 

using namespace std;

// 打表

ll mark[110]=;

int state[30000]; //訪問合法狀態。。。。

int fstate[(1<<20)+1000];

int statenum =0 ;

ll f[2][29000][52];

int n,k;

int bitnum(int i )

return sum ;

}void init_state()

if(line2&(line1>>2))

statenum ++;

state[statenum]= i;

fstate[i] =statenum;

}}int maxidx =;

void dfs(int r , int i,int j, int lev,int num)

2 25 演算法練習

時間限制 1.0s 記憶體限制 512.0mb 十六進製制數是在程式設計時經常要使用到的一種整數的表示方式。它有0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f共16個符號,分別表示十進位制數的0至15。十六進製制的計數方法是滿16進1,所以十進位制數16在十六進製制中是10,而十進位...

藍橋杯 練習(2 25)

時間限制 1.0s 記憶體限制 512.0mb 回形取數就是沿矩陣的邊取數,若當前方向上無數可取或已經取過,則左轉90度。一開始位於矩陣左上角,方向向下。輸入格式 輸入第一行是兩個不超過200的正整數m,n,表示矩陣的行和列。接下來m行每行n個整數,表示這個矩陣。輸出格式 輸出只有一行,共mn個數,...

2 25安卓自學

今天學習tablelayout 如果我們直接往tablelayout中新增元件的話,那麼這個元件將佔滿一行!如果我們想一行上有多個元件的話,就要新增乙個tablerow的容器,把元件都丟到裡面!tablerow中的元件個數就決定了該行有多少列,而列的寬度由該列中最寬的單元格決定 tablerow的l...