2019HDU多校第一場 BLANK DP

2022-06-28 04:33:09 字數 1067 閱讀 9443

題意:有四種數字,現在有若干個限制條件:每個區間中不同的數字種類必須是多少種,問合法的方案數。

思路: 定義 dp[i][j][k][t] 代表填完前 t 個位置後, 這 4 個數字最後一次出現的位置, 排序後為 i,j,k,t(i < j < k < t) 的方案數目,則按照第 t+1 位的數字的四種選擇,可以得 到四種轉移。 對於限制可以按照限制區間的右端點分類,求出 dp[i][j][k][t] 後,找到所有以 t 為區間 右端點的限制條件,如果當前狀態不滿足所有限制條件則不合法,不再向後轉移。 總時間複雜度 o(n4)。滾動一維,空間複雜度 o(n3)

**:

#include #define pii pairusing namespace std;

const int maxn = 101;

const int mod = 998244353;

int dp[2][maxn][maxn][maxn];

vectorre[maxn];

int main()

for (int i = 0; i < 2; i++)

for (int j = 0; j <= n; j++)

for (int k = 0; k <= j; k++)

for (int t = 0; t <= k; t++)

dp[0][j][k][t] = 0;

dp[0][0][0][0] = 1;

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

for (int j = 0; j <= i; j++)

for (int k = 0; k <= j; k++)

for (int t = 0; t <= k; t++) }}

} int ans = 0;

for (int i = 0; i <= n; i++)

for (int j = 0; j <= i; j++)

for (int k = 0; k <= j; k++)

ans = (ans + dp[n & 1][i][j][k]) % mod;

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

}}

2019HDU多校第一場

1002.operation 傳送 題意 給定乙個長度為 n 的數列,m 次操作,每次操作如下 0 l r 查詢區間 l,r 內若干個數的最大異或和。1 x 給數列末尾新增乙個數 x 資料範圍 1 n,m 5e5,1 a i 2 分析 開始直接考慮用線段樹維護區間線性基的並,然後每次查詢求區間線性基...

2019杭電多校第一場

dp i j k t dp i j k t dp i j k t 表示0 1 2,3 0,1,2,3 0,1,2,3出現的位置排序後為i,j k,t i,j,k,t i,j,k,t的方案數 列舉第t 1 t 1t 1位的情況進行轉移 對於限制情況,固定右端點,暴力列舉所有狀態,把所有非法狀態清零 i...

2019 杭電多校(第一場)

題目 1002 operation 線性基 題意給你n個數 兩個操作,查詢l r區間異或最大值 在陣列最後麵加一數 思路維護兩個陣列 1 b i j 儲存a 1 到a i 之間的第j位線性基。2 pos i j 儲存最大的l a l 使得b i j 有值。對於每一次詢問 l,r 如果pos r j ...