1606E - Arena - CodeForces Solution


combinatorics dp math *2100

Please click on ads to support us..

C++ Code:

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 998244353;
signed main(){
    int n,x; cin >> n >> x;
    vector<vector<int>> p(x+1,vector<int> (n+1,0)),comb(n+1,vector<int> (n+1,0));
    for(int i=1;i<=x;i++){
        p[i][0] = 1;
        for(int j=1;j<=n;j++){
            p[i][j] = p[i][j-1]*i%mod;
        }
    }
    for(int i=0;i<=n;i++){
        comb[i][0] = 1;
        for(int j=1;j<=i;j++){
            comb[i][j] = (comb[i-1][j-1] + comb[i-1][j])%mod;
        }
    }
    vector<vector<int>> dp(n+1,vector<int> (x+1,0));
    for(int i=2;i<=n;i++){
        for(int j=1;j<=x;j++){
            if(j < i){
                dp[i][j] = (p[j][i] - p[j-1][i] + mod)%mod;
            }
            else{
                for(int k=0;k<=i;k++){
                    dp[i][j] = (dp[i][j] + dp[i-k][j-i+1]*p[i-1][k]%mod*comb[i][k]%mod)%mod;
                }
            }
        }
    }   
    int ans = 0;
    for(int i=1;i<=x;i++) ans = (ans + dp[n][i])%mod;
    cout << ans << '\n';
}


Comments

Submit
0 Comments
More Questions

791. Custom Sort String
787. Cheapest Flights Within K Stops
779. K-th Symbol in Grammar
701. Insert into a Binary Search Tree
429. N-ary Tree Level Order Traversal
739. Daily Temperatures
647. Palindromic Substrings
583. Delete Operation for Two Strings
518. Coin Change 2
516. Longest Palindromic Subsequence
468. Validate IP Address
450. Delete Node in a BST
445. Add Two Numbers II
442. Find All Duplicates in an Array
437. Path Sum III
436. Find Right Interval
435. Non-overlapping Intervals
406. Queue Reconstruction by Height
380. Insert Delete GetRandom O(1)
332. Reconstruct Itinerary
368. Largest Divisible Subset
377. Combination Sum IV
322. Coin Change
307. Range Sum Query - Mutable
287. Find the Duplicate Number
279. Perfect Squares
275. H-Index II
274. H-Index
260. Single Number III
240. Search a 2D Matrix II