[容斥原理][DP] SRM 498 Div1 Hard FoxJumping

大模型的实践应用31-基于通义千问大模型改进台风和海浪预测研究,利用机器学习与通义千问结合的思路实现对台风和海浪预测分析 通义千问大模型是阿里巴巴云推出的一款大规模语言模型,旨在通过强大的自然语言处理能力提供更广泛的服务。从最初的构想到如今的广泛应用,通义千问的发展见证了人工智能领域尤其是自然语言处理技术的巨大进步。自发布以来,通义千问不断迭代升级,不仅在规模上实现了飞跃式的增长,在性能方面也得到了显著提升。本次研究尝试将通义千问强大的自然语言处理能力与经典的时间序列预测算法相结合,旨在提高对未来天气状况预测的精度。具体来说,首先使用通义千问生成高质量的文字描述来增强特征表达力; 阅读详情

Solution

对不能走(+ai,+ai)容斥,设dpp,q表示走了p步不合法的,和为10q的方案数。
同时DP出x,y两个方向上走了p步,长度为q的方案数xp,q,yp,q。因为此时x,y独立,最后计算的时候直接乘起来就好了。
那最后答案就是

∑p=0R∑q=0⌊min(m,n)10⌋(−1)p(Rp)xR−p,n−10pyR−p,m−10qdpp,q

x,y的DP显然可以前缀和优化,刚开始暴力n3T掉以后还打算FFT。
// BEGIN CUT HERE

// END CUT HERE
#line 5 "FoxJumping.cpp"
#include <bits/stdc++.h>
using namespace std;

const int N = 888;
const int MOD = 10007;

int dp[N << 1][N];
int x[N << 1][N], y[N << 1][N];
int gx[N << 1][N], gy[N << 1][N];
int C[N << 1][N << 1];
int n, m, mn, dx, dy, R, cnt, ans;
int a[N];

class FoxJumping {

public:
  inline void Add(int &x, int a) {
    x = (x + a) % MOD;
  }
  int getCount(int Tx, int Ty, int Mx, int My, int _R, vector <int> bad) {
    n = Tx; m = Ty; dx = Mx; dy = My; R = _R; mn = min(m, n);
    bad.push_back(0); cnt = bad.size();
    for (int i = 0; i < cnt; i++) a[i + 1] = bad[i];
    sort(a + 1, a + cnt + 1);
    cnt = unique(a + 1, a + cnt + 1) - a - 1;

    ans = 0;
    memset(x, 0, sizeof x);
    memset(y, 0, sizeof y);
    memset(dp, 0, sizeof dp);

    for (int i = 0; i <= R; i++) {
      C[i][0] = 1;
      for (int j = 1; j <= i; j++)
        C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % MOD;
    }

    x[0][0] = 1;
    for (int i = 0; i <= R; i++)
      for (int j = 0; j <= n; j++) {
        gx[i][j + 1] = (gx[i][j] + x[i][j]) % MOD;
        Add(x[i + 1][j], (gx[i][j + 1] - gx[i][max(j + 1 - dx - 1, 0)] + MOD) % MOD);
      }
    y[0][0] = 1;
    for (int i = 0; i <= R; i++)
      for (int j = 0; j <= m; j++) {
        gy[i][j + 1] = (gy[i][j] + y[i][j]) % MOD;
        Add(y[i + 1][j], (gy[i][j + 1] - gy[i][max(j + 1 - dy - 1, 0)] + MOD) % MOD);
      }
    dp[0][0] = 1;
    for (int i = 0; i <= R; i++)
      for (int j = 0; j * 10 <= mn; j++)
        for (int k = 1; k <= cnt; k++)
          if (j * 10 + a[k] <= mn) Add(dp[i + 1][j + a[k] / 10], dp[i][j]);
          else break;

    for (int p = 0; p <= R; p++)
      for (int q = 0; 10 * q <= mn; q++) {
        int res = x[R - p][n - 10 * q] * y[R - p][m - 10 * q] % MOD * dp[p][q] % MOD * C[R][p] % MOD;
        if (p & 1) Add(ans, MOD - res);
        else Add(ans, res);
      }
    return ans;
  }

  // BEGIN CUT HERE
public:
  void run_test(int Case) { if ((Case == -1) || (Case == 0)) test_case_0(); if ((Case == -1) || (Case == 1)) test_case_1(); if ((Case == -1) || (Case == 2)) test_case_2(); if ((Case == -1) || (Case == 3)) test_case_3(); if ((Case == -1) || (Case == 4)) test_case_4(); if ((Case == -1) || (Case == 5)) test_case_5(); }
private:
  template <typename T> string print_array(const vector<T> &V) { ostringstream os; os << "{ "; for (typename vector<T>::const_iterator iter = V.begin(); iter != V.end(); ++iter) os << '\"' << *iter << "\","; os << " }"; return os.str(); }
  void verify_case(int Case, const int &Expected, const int &Received) { cerr << "Test Case #" << Case << "..."; if (Expected == Received) cerr << "PASSED" << endl; else { cerr << "FAILED" << endl; cerr << "\tExpected: \"" << Expected << '\"' << endl; cerr << "\tReceived: \"" << Received << '\"' << endl; } }
  void test_case_0() { int Arg0 = 2; int Arg1 = 2; int Arg2 = 1; int Arg3 = 1; int Arg4 = 2; int Arr5[] = {}; vector <int> Arg5(Arr5, Arr5 + (sizeof(Arr5) / sizeof(Arr5[0]))); int Arg6 = 1; verify_case(0, Arg6, getCount(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5)); }
  void test_case_1() { int Arg0 = 2; int Arg1 = 2; int Arg2 = 1; int Arg3 = 1; int Arg4 = 3; int Arr5[] = {}; vector <int> Arg5(Arr5, Arr5 + (sizeof(Arr5) / sizeof(Arr5[0]))); int Arg6 = 6; verify_case(1, Arg6, getCount(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5)); }
  void test_case_2() { int Arg0 = 10; int Arg1 = 10; int Arg2 = 10; int Arg3 = 10; int Arg4 = 1; int Arr5[] = {}; vector <int> Arg5(Arr5, Arr5 + (sizeof(Arr5) / sizeof(Arr5[0]))); int Arg6 = 1; verify_case(2, Arg6, getCount(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5)); }
  void test_case_3() { int Arg0 = 10; int Arg1 = 10; int Arg2 = 10; int Arg3 = 10; int Arg4 = 1; int Arr5[] = {10}; vector <int> Arg5(Arr5, Arr5 + (sizeof(Arr5) / sizeof(Arr5[0]))); int Arg6 = 0; verify_case(3, Arg6, getCount(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5)); }
  void test_case_4() { int Arg0 = 11; int Arg1 = 11; int Arg2 = 11; int Arg3 = 11; int Arg4 = 2; int Arr5[] = {10}; vector <int> Arg5(Arr5, Arr5 + (sizeof(Arr5) / sizeof(Arr5[0]))); int Arg6 = 140; verify_case(4, Arg6, getCount(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5)); }
  void test_case_5() { int Arg0 = 123; int Arg1 = 456; int Arg2 = 70; int Arg3 = 80; int Arg4 = 90; int Arr5[] = {30, 40, 20, 10, 50}; vector <int> Arg5(Arr5, Arr5 + (sizeof(Arr5) / sizeof(Arr5[0]))); int Arg6 = 6723; verify_case(5, Arg6, getCount(Arg0, Arg1, Arg2, Arg3, Arg4, Arg5)); }

  // END CUT HERE


};

// BEGIN CUT HERE
int main(void) {
  FoxJumping ___test;
  ___test.run_test(-1);
  system("pause");
}
// END CUT HERE
Lammps不同亲疏水性粗糙表面的润湿行为模拟(包含in文件) Lammps粗糙表面的润湿行为模拟(包含in文件)前言—润湿行为模拟一、物理模型构建二、具体in文件—in文件内循环亲疏水性三、具体in文件—分子模板构建初始模型以及平衡态模拟四、全部代码(基地粗糙表面只提供data文件) 前言—润湿行为模拟 润湿现象:当液体与固体接触时,液体的附着层将沿固体表面延伸。当接触角 θ\rm \thetaθ 为锐角时,液体润湿固体,若θ为零时,液体将展延到全部固体表面上。润湿现象的产生与液体和固体的性质有关。(来自百度百科) 润湿行为的本质是固液之间的相互作用,也就是分子间的范 阅读详情

相关推荐

RPN 解析

RPN全称是Region Proposal Network,Region Proposal的中文意思是“区域选取”,也就是“提取候选框”的意思,所以RPN就是用来提取候选框的网络; 1. RPN的意义 RPN第一次出现在世人眼中是在Faster RCNN这个结构中,专门用来提取候选框,在RCNN和Fast RCNN等物体检测架构中,用来提取候选框的方法通常是Selective Se

lanran2的博客 10万+

【TC SRM 498 DIV1 Hard】【TC 11223】FoxJumping(容斥)(DP)

传送门 题解: 设f[i][x][y]f[i][x][y]f[i][x][y]表示用iii个任意向量走到(x,y)(x,y)(x,y)的方案数,g[i][k]g[i][k]g[i][k]表示用iii个非法向量走到k∗10,k∗10k*10,k*10k∗10,k∗10的方案数。 DP发现,f[i][x][y]f[i][x][y]f[i][x][y]中xxx和yyy的两维没有关系,分开DP,前缀和优...

zxyoi_dreamer的博客(不定期诈尸) 376

EPICS Phoebus手册1

EPICS客户端phoebus 手册

yuyuyuliang00的博客 3953

[容斥 DP] Topcoder SRM 498 DIV1 Hard. FoxJumping

容斥 令 fi,jf_{i,j} 表示走了 ii 步不合法的,x和y都走了 jj 的方案数 li,jl_{i,j},ri,jr_{i,j} 分别表示在x,y方向上随便走了 ii 步,走了 jj 的方案数那么答案是 ∑d=0R(−1)d(Rd)∑i=0nfd,i×lR−d,n−i×rR−d,m−i \sum_{d=0}^R(-1)^d{R\choose d}\sum_{i=0}^nf_{d,i}

CE玩家 678

ndnSIM学习笔记(一)

在接下来的一段时间要用ndnSIM来做自己的仿真网络,需要系统的学习相关内容,以下为内容记录。1.安装      1.1核心依赖(必需的)             • python &gt;= 2.6             • libsqlite3             • libcrypto++             • pkg-config             • Boost lib...

gaonjzzz的博客 2985

2025年从零开始:构建你的首个ComfyUI工作流-ComfyUI入门教程

然而,由于它拥有众多的插件节点,以及较为复杂的操作流程,学习起来相对困难。以前面搭建的文生图工作流为例,首先点击功能区的【保存】,然后你的浏览器会出来一个弹窗,你可以进行文件命名,点击确定后浏览器会下载该文件,也就是带“json”后缀的文件,这样我们的工作流就打包成一份文件了。思考一下前面说的,节点是不是需要下载安装才能使用,而我们复用别人的工作流,他用的节点你不一定下载了,因为目前有600多个节点,你不可能全部下载了吧,所以我们日后使用别人的工作流,你会经常出现这样的问题。

weixin_59486588的博客 1454

容斥 dp

容斥系数一般是 (−1)∣S∣(-1)^{|S|}(−1)∣S∣。 初学容斥原理时都做过这样的一道题。有一张 n×mn \times mn×m 的棋盘,在上面染色,要求任意一行、任意一列的颜色都不完全相同。这是一个模型 全部 −-− 至少一个 +++ 至少两个 $- \cdots = \ $一个也没有。 所以我们枚举一下有多少行颜色一定相同,有多少列颜色一定相同。可以发现如果只有行或只有列,那么每行(每列)的颜色不一定相同,而同时有行和列就必须是同一颜色。那么用行数 +++ 列数套上容斥系数就行了。 其实在

ylxmf2005's Blog 591

单晶塑性abaqus-umat自学

单晶塑性abaqus-umat 摘要1. 简介2. 单晶弹塑性本构模型回顾2.1运动学 本文以翻译黄永刚老师的umat文章为主,这个颜色的为个人的理解。 摘要 包含单晶塑性的abaqus用户材料子程序。本文回顾有限元形式的单晶弹塑性和黏弹塑性,包含小变形理论,以及严格的有限变形和有限旋转理论。单晶的非弹性变形由于晶体滑移,假定遵从Schmid准则。提出多种多样的分切应力与剪切变形的自硬化和潜硬化关系,并且包含在子程序内。 1. 简介   有限元程序ABAQUS已经广泛应用在固体的变形与应力分析。除了自身大量

Niklas4088的博客 1万+

有关一类容斥计数dp问题

容斥+dp是啥?能吃吗?

Rayment的博客 930

[模型部署]-[LLM]昇腾部署Qwen3-Coder-30B-A3B-Instruct

摘要:本文介绍了在Ascend NPU上部署Qwen3-Coder-30B-A3B-Instruct大模型的实践过程。通过vLLM-Ascend框架,详细说明了环境准备(CANN 8.1、PyTorch-NPU 2.5.1等)、模型下载、容器启动及服务部署步骤,包括vLLM服务的启动参数配置和接口测试方法。测试结果显示在当前2卡910B3配置下性能表现仅为8token/s(1并发),并指出流式调用时存在无法输出usage信息的问题。该方案为Ascend平台私有化部署大模型推理服务提供了参考实现。

1671

解决uc浏览器劫持video标签问题

解决uc视频悬浮播放 ,video标签被浏览器劫持 ,vide0适配

smile_y_y的博客 3449

容斥dp,二项式反演

浅谈容斥dp。

wanglianda2007的博客 518

端到端自动驾驶:特斯拉FSD Beta技术拆解

端到端自动驾驶:特斯拉FSD Beta技术拆解 ,人工智能,计算机视觉,大模型,AI,这篇文章围绕特斯拉FSD Beta的端到端自动驾驶技术展开,先介绍端到端自动驾驶的定义、与传统方案的区别及FSD Beta的特点,再阐述其硬件基础、技术架构,解析关键技术,还涉及训练数据与标注、安全与冗余设计、实际应用场景与挑战以及技术迭代与更新等内容,展现了该技术的多方面情况。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

SRM 498 FoxJumping(dp+容斥)

传送门 神题OrzOrzOrz。 先预处理出三个dpdpdp数组: fxi,jfx_{i,j}fxi,j​表示横向不加限制走iii步走到jjj的方案数。 fyi,jfy_{i,j}fyi,j​表示纵向不加限制走iii步走到jjj的方案数。 fi,jf_{i,j}fi,j​表示走iii步每次只能走被限制的步数最终走jjj格方案数。 然后就可以xjb容斥就能算出答案。 显然可以枚举走几步非法的得出答案...

苟为蒟蒻又何妨 355

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

[SRM 498 Div.1] Hard FoxJumping

题意 有一个网格,每一步可以走\((0\cdots M_x,0\cdots M_y)\)中的任意非零向量。 有\(K\)种向量不能走,为\((k_i,k_i)\),其中\(k_i\)为\(10\)的倍数。 求从\((0,0)\)走\(R\)步到\((T_x,T_y)\)的方案数。对\(10007\)取模。 \(,1\leq T_x,T_y,M_x,M_y\leq800,1\leq R\leq160...

weixin_33860722的博客 135

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

容斥dp的一些模型

1.全部都有 −至少有一个 +至少有两个 −⋯一个也没有。2.所有的情况 −一个也没有 =至少有一个3.至少有 k个 −kk1​×至少有 k1个 +kk2​×至少有 k2⋯恰好有 k个的方案数xS∑T⊆S​−1∣T∣1minT5.补集转化 ans总数−补集。

Undefined 1162

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

容斥原理和容斥DP

容斥原理和容斥DP 容斥原理 ∣⋂i=1nSi‾∣=∣U∣−∣⋃i=1nSi∣=∑0≤k≤n(−1)k∑1≤i1<⋯<ik≤n∣⋂j=1kSij∣ \left|\bigcap_{i=1}^n \overline{S_i}\right| = |U| - \left|\bigcup_{i=1}^n S_i\right| = \sum_{0 \le k\le n}(-1)^k\sum_{1\le i_1<\cdots<i_k\le n}\left|\bigcap_{j=1}^k S_{i_

jiahonghao2002的博客 550

51nod 1486 大大走格子(dp,容斥)

参考题解:http://blog.youkuaiyun.com/mrazer/article/details/52047436 看到题首先是要想到容斥,因为之前看的一篇容斥的文章讲到过。不过里面把这部分内容划掉了,因为讲的有问题。。。。其次呢,想到机器人走方格的题目,毕竟这只是比那个多了个不能走的格子,不过想了想,还是不会做啊 还是好好看题解吧。。。 我把题解中的状态转移方程展开了几项,正好是++–的容斥

梦幻的蔷薇色 558

[容斥 DP] LOJ#6077. 「2017 山东一轮集训 Day7」逆序对

考虑从小到大加入一个数,加入 ii 时会增加大于0小于 ii 对逆序对那么就相当于求 ∑ai=k\sum a_{i} = k 的方案数,其中 ai<ia_i<i这就是个很经典的背包了——BZOJ2431但是这题不能用背包来做考虑容斥。朴素的容斥要枚举哪些超过限制,这样复杂度是指数级别的,但是很多是有重复的令 fi,jf_{i,j} 表示用 ii 个数组成 jj 的方案数gi=∑fi,j×(n+k−j

CE玩家 1156

[DP][容斥原理] ARC064 F - Rotated Palindromes

SolutionSolutionSolution 要求的就是长度为 nnn 的可通过循环位移得到回文串的串的本质不同的个数。 我们考虑枚举长度为 x(x|n)x(x|n)x(x|n) 的回文串作为其最小循环节来计数。 可以发现回文串的循环节也是循环的。那长度为 xxx 的循环节为 k⌈x2⌉k⌈x2⌉k^{\lceil{x\over2}\rceil} 种。 但这样求出来的并不是作为最小循环...

Vectorxj的博客 499

快速傅里叶变换(容斥+dp)

时间限制:1Sec内存限制:128 MB 题目描述 chen_03在切快速傅里叶变换(FFT)。 一共有n种FFT的题,他做出一道第i种题后能获得ci点的巨佬值。 他一共要打m场模拟赛,由于Rainy7的魔法,每次赛前,他的巨佬值会清零。 chen_03不希望他的巨佬值为0。为了获得一些巨佬值,每场模拟赛前,他都要去切FFT的题。然而他太巨了,Rainy7为了限制他的实力,又施了一个魔法,使得第i种题只有di道,且每道题在切完后会消失。 对于每场模拟赛,chen_03都有一个幸运数字,他想要知...

oneplus123的博客 410

【容斥】【DP】基本题

题意: 分析: 比较恶心的DP套容斥题。 因为排列个数=所有环排列循环节长度。 可以很容易算出排列个数,但要求其对应的环排列个数。 有个很直观的思路:求出每个环排列个数*其循环节个数的和,将这个和除以排列长度,就能得到换排列个数。 然后利用公式 ∑d∣nφ(d)=n\sum_{d|n}\varphi(d)=n∑d∣n​φ(d)=n 于是就可以枚举一个数kkk,求出所有循环节个数为kkk这个数的...

氧化钠的博客 429

Fox And Jumping(0-1背包)

原题链接 B. Fox And Jumping time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output Fox Ciel is playing a game. In this game there is an infinite lon

HowieMen的博客 933

[bzoj4455][容斥原理][DP]小星星

Description 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品。她有n颗小星星,用m条彩色的细线串了起来,每条细 线连着两颗小星星。有一天她发现,她的饰品被破坏了,很多细线都被拆掉了。这个饰品只剩下了n?1条细线,但 通过这些细线,这颗小星星还是被串在一起,也就是这些小星星通过这些细线形成了树。小Y找到了这个饰品的设 计图纸,她想知道现在饰品中的小星星对应着原来图纸上的哪些小星星。...

Rose_max的博客 453

【容斥原理】【DP】AGC005D ~K Perm Counting

分析: 比较简单(板)的容斥题。 设枚举出i个非法位置的方案数为fif_ifi​ 答案就是∑i=0i≤n(−1)ifi∗(n−i)!\sum_{i=0}^{i\leq n}(-1)^if_i*(n-i)!∑i=0i≤n​(−1)ifi​∗(n−i)! 问题就在于如何求fif_ifi​。显然,可以把互相可能矛盾的位置分为一类,然后每一类搞一个n2n^2n2的DP求出来有k个矛盾的方案数。然后所有的一...

氧化钠的博客 410

SRM 498 div2

250pt: 题意:就是黑板上有三个数,有n次选择的机会,每次选择哪个数可以得到和那个数相同的分数,然后黑板上的该数减一。求n次选择最多能得到多少分。(注意分数减到0后就不在减)。 思路:水题啊,每次选择时排序即可,选择最大的。 代码: int getMaximumPoints(int A, int B, int C, int N) { int i...

huobengluantiao8 130
上一篇: [树状数组] ARC075 E - Meaningful Mean
下一篇: [容斥原理][Meet-in-middle][Matrix-Tree定理] SRM551 Div1 Hard SweetFruits
Vectorxj
博客等级 码龄11年 35粉丝 231原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值