• C. Planar Reflections dp


    C. Planar Reflections dp

    题目大意:

    给你一条射线,他的寿命是 (k) ,每次撞击一个平面,如果穿过,则寿命不减,如果反射,则生成一条新的射线,寿命为之前的射线 -1,问给你 (n) 个平面,一条寿命为 (k) 的射线,最多可以产生多少条新射线。

    下面是一个 (n=2,k=3) 的样例。

    题解:

    容易发现这个是一个 (dp) ,因为你发现推小数据都是十分复杂的,而且状态和状态之间是有重复的,可以相互转移的。

    (dp[i][j]) 表示寿命为 (i) 通过第 (j) 个间隔的数量。

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1e3 + 10;
    const int mod = 1e9 + 7;
    typedef long long ll;
    ll dp[maxn][maxn];
    
    int main() {
        int T;
        scanf("%d", &T);
        while (T--) {
            int n, k;
            scanf("%d%d", &n, &k);
            for (int i = 1; i <= k; i++) {
                for (int j = 1; j <= n; j++) {
                    dp[i][j] = 0;
                }
            }
    //        printf("!!!
    ");
            dp[k][1] = 1;
            ll ans = 1;
            for (int i = k - 1; i >= 1; i--) {
                ll sum = 0;
                if ((k - i) & 1) {
                    for (int j = 1; j <= n; j++) {
                        sum = (sum + dp[i + 1][j]) % mod;
                        dp[i][j] = sum;
                        ans = (ans + dp[i][j]) % mod;
                    }
                } else {
                    for (int j = n; j >= 2; j--) {
                        sum = (sum + dp[i + 1][j]) % mod;
                        dp[i][j] = sum;
                        ans = (ans + dp[i][j]) % mod;
                    }
                }
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }
    
  • 相关阅读:
    如何启动SOLR特性: 按层面检索
    solr的范围查询 TO
    jetty
    solr高亮的使用
    SQL日期加一天
    SQL从第二条开始取记录
    写出昨天的日期
    SQL取前后一条数据
    项目组【网站】的项目
    获取input文本框中高亮显示的值
  • 原文地址:https://www.cnblogs.com/EchoZQN/p/14595714.html
Copyright © 2020-2023  润新知