GXOI GZOI2019 寶牌一大堆 DP

2022-05-08 03:09:11 字數 1309 閱讀 2176

[gxoi/gzoi2019]寶牌一大堆

求最大值容易想到$dp$,但如果將$7$種和牌都考慮進來的話,$dp$狀態不好設,我們將比較特殊的七小對和國士無雙單獨求,其他的進行$dp$。

觀察其他五種和牌可以發現,他們都是由$4$組槓子或面子和$1$組雀頭組成。

那麼可以列出$dp$式子:$f[i][j][k][l][m][n]$表示前$i$種牌,其中有$j$個槓子或面子、$k$個雀頭,第$i-2\sim i$種牌分別有$l,m,n$張時前$i-3$種牌的最大值。

轉移時對順子、槓子、刻子和雀頭四種情況分別轉移即可。

對於國士無雙,暴力列舉第$14$張牌是什麼然後取最大值即可。

對於七小對,設$f[i][j]$表示前$i$種牌中取了$j$種雀頭的最大值,$01$揹包轉移即可。

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

using namespace std;

const int mod=1e9+7;

ll f[35][5][2][5][5][5];

ll f[35][8];

char ch[3];

int t;

ll p[6];

ll c[10][10];

int s[35];

int t[35];

bool vis[35]=;

int g[20]=;

void add(ll &x,ll y)

int find(char ch[3])

ll get(int id,int num)

ll dp()}}

}} }

return res;

}ll qxd()

} return f[34][7]*7;

}ll gsws()

add(res,sum*13);

} return res;

}int main()

} p[0]=1ll;

for(int i=1;i<=4;i++)

scanf("%d",&t);

while(t--)

while(1)

memset(t,0,sizeof(t));

while(1)

ll ans=0;

add(ans,dp());

add(ans,gsws());

add(ans,qxd());

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

}}

GXOI GZOI2019 逼死強迫症

傳送門 to luogu 將道路看成乙個很高很瘦的傢伙 乙個 n 2 n times 2 n 2 的瘦高個 考慮最後一行 或者說,第一行 是什麼情況。用 f n f n f n 表示答案。不好搞定的是第三種情況。下面都只討論第三種情況。如圖。不妨設第一行的 1 1 1 times 1 1 1 磚塊在...

GXOI GZOI2019 舊詞 解題報告

對於一棵 n 個節點的樹,給出 m 次詢問和常數 k 每次給出 r,x 求 sum limits r depth lca i,x k n,m le 5 times 10 4 1 le r,x le n k le 10 9 如果有做過 lnoi2014 lca,就很容易想出解法。可以通過樹上差分,點 ...

題解 GXOI GZOI2019 旅行者

調這個題調了兩個月,被自己蠢哭 給乙個有向圖,一組關鍵點,求關鍵點之間的最短的距離 這個題目有兩種做法,分別是 nlogn 和 nlog 2n 的 首先說 nlogn 的官方做法,我們考慮多源迪傑斯特拉 正圖上從 k 個關鍵點出發跑 dijkstra 記某個點離最近的關鍵點距離為 dis 0 i 反...