• abc179d


    abc179d

    大意

    给定 (N)(K) 个互不相交的整数端点区间 ([L_i, R_i]) , 定义 (S = cup_i[L_i,R_i]capmathbb{N})

    初始站在台阶1,可以选择 (iin S) 并走到第 (1+i) 阶。

    问,走到第 (N) 阶的方法数有多少种。

    思路

    很像那个dp入门题...

    但是有一些点无法转移到当前点 (k) ,因为 (S) 可能并不包含 (1...k-1) 所有的数...

    考虑区间对当前点的贡献,显然,当 (k) 变为 (k+1) 区间贡献的改变最多只有首末的值。

    枚举区间计算贡献,然后更新。

    代码

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    #include <cstring>
    using namespace std;
    
    #define ll long long
    #define ull unsigned long long
    #define cint const int&
    #define Pi acos(-1)
    
    const int mod = 998244353;
    const int inf_int = 0x7fffffff;
    const ll inf_ll = 0x7fffffffffffffff;
    const double ept = 1e-9;
    
    int n, k;
    int l[11], r[11];
    ll sum[11];
    ll dp[200200];
    
    int main() {
        cin >> n >> k;
        for(int i=1; i<=k; i++) cin >> l[i] >> r[i];
        dp[1] = 1;
        for(int i=2; i<=n; i++) {
            for(int j=1; j<=k; j++) {
                if(l[j] < i) {
                    sum[j] += dp[i-l[j]];
                    if(r[j] < i-1) sum[j] -= dp[i-r[j]-1];
                    if(sum[j] < 0) sum[j] += mod;
                    else sum[j] %= mod;
                    dp[i] += sum[j];
                    dp[i] %= mod;
                }
            }
        }
        cout << dp[n];
        return 0;
    }
    
  • 相关阅读:
    JSP所需要掌握的部分
    Parameter index out of range (1 > number of parameters, which is 0).
    Servlet到Servlet的请求转发与重定向的区别
    servlet范围:数据共享
    hihocoder 1169 猜数字
    UVA 1149 Bin Packing
    Using a Comparison Function for the Key Type
    STL Iterators
    SPOJ Pouring Water
    求DAG上两点的最短距离
  • 原文地址:https://www.cnblogs.com/ullio/p/13951000.html
Copyright © 2020-2023  润新知