基本套路選講

2021-09-11 06:49:35 字數 1695 閱讀 9613

這道題明顯就是乙個大暴力,但是考場上碰到這種題確實讓人傷腦筋,

如何在考場上穩穩地拿下這100分呢?

首先,為了進行完全的搜尋,這題應用dfs的結構,

而不是貪心選擇某種出牌方式。然後我們應先分析搜尋的方法。

在dfs中我們先考慮不帶牌的出法。即單順子,雙順子,三順子。

三帶一、三帶二可以看做是特殊的三張牌;

四帶二可以看做是特殊的炸彈。

通過歸納,剩下的出牌方法就只有單排,對子和王炸了。

所以在dfs的單層中,程式需要做:

搜尋單順子,雙順子,三順子

搜尋三張牌,炸彈

搜尋剩下的單排,對子,王炸

這樣寫的話可能只能通過60%~80%的資料。考慮優化

三張牌和炸彈帶的牌可以最後在剩下的單排,對子中去除。

而不用在搜尋三張牌,炸彈時進行搜尋。

#include #include #include #include #include #define ll long long

#define inf 2147483647

using namespace std;

struct sth

}p,debug;

int t,n,i,j,x,y,ans;

int w,bs,sm;

bool cl(sth s)

void make(sth s,int step)}}

for (k=3;k<=12;k++)}}

for (k=3;k<=13;k++)}}

for (k=3;k<=15;k++)

}for (k=3;k<=15;k++)

}int dan=0,dui=0;

for (k=3;k<=15;k++)

switch(f.l[k])

if (f.w) dan+=f.w;

while (f.zd>0 && (dan>1||dui>0))

dan+=dui;

while (f.ld>0&&dan>0)

if (dan>=f.w) dan-=f.w; else f.w=0;

for (k=3;k<=15;k++)

f.l[k]=0;

make(f,step+dan);

}void init()

int main()

p.w=w;

ans=n;

make(p,0);

printf("%d\n",ans);

}return 0;

}

字首和  pre[i]=pre[i-1]+a[i] 

二維字首和 

pre[i][j]=pre[i-1][j]+pre[i][j-1]-pre[i-1][j-1]+a[i][j]

pre[x2][y2]-pre[x1-1][y2]-pre[x2][y1-1]+pre[x1-1][y1-1]

x1,y1

x2,y2

第i個動作的第j位向後的最近乙個數字k的位置 

if k == a[i][j][k+1]:

suf[i][j][k]=k+1

else:

suf[i][j][k]=suf[i][j][k+1]

NOIP Dp基本套路大全

dp,一直是困擾許 我 許 這 多 一 多 個 oler 蒟蒻 的問題之一。而在看似毫無章法與固定解題模式的dp題中,卻實實在在有那麼一些基本套路,幫助我們在求解dp的過程中能給我們或多或少提 多 供 騙 一些思 水 路 分 持續更新中。求大佬指正orz。p.s 以下的狀態轉移方程只是最基礎的,不含...

Redis使用基本套路

redis的資料,通常都是來自於資料庫。存入redis當中,可以快速的查詢。不用每次都關聯查詢,然後其他處理什麼的。通常可以把一些,不經常變的資料儲存其中。避免資料變動,而redis快取資料不變,可以為快取資料設定乙個過期時間。通常redis儲存的資料都是陣列進行json加密,而取出的時候,進行js...

luogu 十一 基本套路 day1

對於乙個線段,要不就只買票,要不就用ic卡 貪心嘛 所以只要比較這兩種策略,取較大值就好。rep i,1,n 1 rd n rd m while m rep i,1,n rep j,1,n 構造相鄰的兩頭牛,看能不能貪心,且看需要滿足什麼條件的時候才能貪心。設有相鄰的兩頭牛a,b,來討論一下在滿足什...