HYSBZ - 4806 炮 [dp]

工业互联网工控安全与工业质检AI大模型建设方案.pptx 立即下载

题意:MxN的棋盘中最多放多少个炮,使得互相不能被打。
dp解决,M,N的范围为100, 不考虑状压。
状态:dp[i][j][k]表示当前行为i,前i-1行有j列没有炮,有k列有1个炮的方案数。
决策:
if(j-1>=0) dp[i][j][k] = (dp[i][j][k] + dp[i-1][j-1][k]*(m-(j-1)-k))%p; ///在没炮的地方放一个
if(j+1 <= m && k >= 1) dp[i][j][k] = (dp[i][j][k] + dp[i-1][j+1][k-1]*(j+1))%p; ///在一个炮的地方放一个
if(j >= 2) dp[i][j][k] = (dp[i][j][k] + dp[i-1][j-2][k]*C(m-k-(j-2)))%p; ///在没炮的地方放两个
if(k >= 1 && j>= 1) dp[i][j][k] = (dp[i][j][k] + dp[i-1][j][k-1](m-j-(k-1))(j))%p; ///在没炮的地方和一个炮的地方分别放一个
if(j+2 <= m && k >= 2) dp[i][j][k] = (dp[i][j][k] + dp[i-1][j+2][k-2]*C(j+2))%p; ///在两个一个炮的地方分别放一个炮

边界条件:dp[0][0][0] = 1, else = 0

#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<bitset>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<vector>
#include<cstdlib>
#include<list>
#include<stack>
#include<cmath>
using namespace std;
typedef long long LL;
const int p = 999983;
int n, m;
LL dp[105][105][105], ans;
LL C(LL x)
{
    return x*(x-1)/2;
}
int main()
{
    ios::sync_with_stdio(false);
    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    #endif // ONLINE_JUDGE
    while(cin >> n >> m)
    {
        memset(dp, 0, sizeof(dp));
        dp[0][0][0] = 1;
        for(int i = 1; i <= n; i++)
            for(int j = 0; j <= m; j++)
                for(int k = 0; j+k <= m; k++)
                {
                    dp[i][j][k] += dp[i-1][j][k] %= p;///不放
                    if(j-1>=0) dp[i][j][k] = (dp[i][j][k] + dp[i-1][j-1][k]*(m-(j-1)-k))%p; ///在没炮的地方放一个
                    if(j+1 <= m && k >= 1) dp[i][j][k] = (dp[i][j][k] + dp[i-1][j+1][k-1]*(j+1))%p; ///在一个炮的地方放一个
                    if(j >= 2) dp[i][j][k] = (dp[i][j][k] + dp[i-1][j-2][k]*C(m-k-(j-2)))%p;    ///在没炮的地方放两个
                    if(k >= 1 && j>= 1) dp[i][j][k] = (dp[i][j][k] + dp[i-1][j][k-1]*(m-j-(k-1))*(j))%p;   ///在没炮的地方和一个炮的地方分别放一个
                    if(j+2 <= m && k >= 2) dp[i][j][k] = (dp[i][j][k] + dp[i-1][j+2][k-2]*C(j+2))%p;    ///在两个一个炮的地方分别放一个炮
                }

        LL ans = 0;
        for(int i = 0; i <= m; i++)
            for(int j = 0; j+i <= m; j++)
                ans = (ans+dp[n][i][j])%p;
        cout << ans << endl;
    }
    return 0;
}
2024 《计算机网络》实验教学指导书.doc 立即下载

相关推荐

SAP 对接CBS(http方式)

CLEAR:lv_xml_crc32_string. CONCATENATEcrc32_passwordcrc32_keyi_stringINTOlv_xml_crc32_string. CONDENSElv_xml_crc32_string. CALLFUNCTION'SCMS_STRING_TO_XSTRING' EXPORTING text=lv_xml_crc32_string encoding='8400' "GB...

3597

炮 HYSBZ - 4806 (dp)

众所周知,双炮叠叠将是中国象棋中很厉害的一招必杀技。炮吃子时必须隔一个棋子跳吃,即俗称”炮打隔子”。 炮跟炮显然不能在一起打起来,于是rly一天借来了许多许多的炮在棋盘上摆了起来……他想知道,在N×M的矩形 方格中摆若干炮(可以不摆)使其互不吃到的情况下方案数有几种。 棋子都是相同的。 Input 一行,两个正整数N和M。 N<=100,M<=100 Output 一行,输出方案数

退役的铜牌狗 406

c++实现异步线程池并详细分析线程池析构流程

多线程编程是提高程序性能和响应能力的关键技术之一,异步线程池作为多线程编程的一种有效实现方式,能够管理和复用线程资源,避免频繁创建和销毁线程带来的开销。在本文中,我们将深入探讨如何实现一个异步线程池。

2301_76564925的博客 1598

HYSBZ - 4806_炮_DP

题意在 N * M 的棋盘上放任意个象棋棋子炮,要求两两之间不能相互攻击。求有多少中方案。

弱的奋斗之旅 263

mt7601 kernel 4.19内核集成版本,以及源码编译相关问题

/os/linux/Makefile.6文件: 添加 EXTRA_CFLAGS += -Wno-incompatible-pointer-types -Wno-date-time。看下iwpriv与iwconfig的源码区别,左侧为iwconfig ,没有用到ioctl,右侧为iwpriv。1、init_timer kernel 4.19内核版本API已经改变,使用timer_setup。使用iwpriv 提示如下,iwpriv工具无法使用了,而iwconfig可以使用。makefile的修改。

1590

地平线旭日X3派(RDK X3)从开箱到联网:新手避坑指南

本文为地平线旭日X3派(RDK X3)新手提供从开箱到联网的完整避坑指南。详细讲解了硬件识别、系统镜像烧录、串口调试(波特率921600)、有线/无线网络配置以及SSH/VNC远程访问等关键步骤,帮助开发者快速搭建稳定的开发环境,为后续AI应用部署扫清障碍。

weixin_29174385的博客 930

HYSBZ - 4806 炮——dp

dp(r,i,j)表示第r行有0个炮的列数为i,有1个炮的列数为j,有2个炮的列数为m-i-j时的情况数决策有三个,当前行放0个炮,放1个炮,放2个炮#include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; using namespace std; co...

hao_zong_yin的博客 307

DeerFlow 系列教程 附录 | 核心文件索引、官方文档索引与推荐阅读顺序

DeerFlow 系列教程 附录本附录汇集了 DeerFlow 项目的核心文件索引、官方文档索引和推荐阅读顺序三份速查资料,方便读者在日常开发和学习中快速定位关键代码与文档。内容按实际项目目录结构整理,所有路径均基于 DeerFlow 2.0 版本验证。

weixin_43674738的博客 327

Round Numbers[数位DP][二进制]

题意:确定一个给定区间内二进制0不少于1的数字的个数。 区间范围较大。 首先确定用数位DP,不再是十进制DP,采用二进制数DP。记忆化搜索记录状态dp[pos][num0][num1]表示当前位pos位,之前有num0个二进制0,有num1个二进制1的状态下的答案。 在搜索过程中,注意首位1的位置,如果首位1没有确定,那么前置0是不能计入统计的。//#include<bits/stdc++.h>

Qer的博客 681

python批量调用大模型API:多线程和异步协程

本文介绍了利用多线程技术批量调用大模型API的实现方法。核心是通过并发请求提高处理效率,主要采用线程池管理并发数量、结果聚合等技术。文章提供了一个完整的Python实现示例,包含APIBatchCaller类及其single_api_call和batch_call方法,详细解析了并发控制、错误处理等关键点,并给出了使用注意事项,包括并发数设置、重试策略和超时处理等。该方案特别适合IO密集型任务,能显著提升批量API调用的效率。

Cachel Wood的博客 759

从养虾到退坑:OpenClaw 卸载不留残留,一步到位

文章摘要: 本文提供OpenClaw软件的完整卸载指南,适用于Windows、macOS和Linux系统。内容包含卸载前的数据备份步骤(配置文件、日志、插件列表),以及详细的卸载脚本。Windows版通过批处理文件删除程序文件、注册表项和环境变量;macOS/Linux版则提供shell脚本,涵盖服务停止、软件包卸载、配置清理等步骤。特别强调要删除所有用户数据(包括多用户环境),确保系统无残留。文末建议重启计算机以使更改生效,实现"一步到位"的彻底卸载。

一键难忘的博客 298

背包dp模板

鉴于很多背包模板写的自己觉得不太习惯,封装成了函数并且标注了使用方法 #include using namespace std; int dp[1005]; int w[1005], v[1005];//w表示物品重量, v表示物品价值 int c[1005];// c表示多重背包每件物品的个数 int m,n; //m表示背包容量, n表示物品种类 void zeroonepack(int c

Qer的博客 656

Ubuntu上通过FinalShell或Asbru访问CentOS虚拟机

使用FinalShell或Asbru远程连接虚拟机

howard2005的专栏 2276

HDU1864 最大报销额 [背包dp-浮点数]

题意是给定最大的报销额度,确定最多能报多少发票。 发票有一些小的限制(坑坑坑) 和 裸01背包的区别在于物体的价值的是浮点数,但此题只需要精确两位小数,所以先*100 再/100处理。#include<iostream> #include<string> #include<cstdio> #include<cstring> #include<bitset> #include<algorithm>

Qer的博客 630

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

766C Mahmoud and a Message[字符串][简单dp]

C. Mahmoud and a Message time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Mahmoud wrote a message s of lengt

Qer的博客 541

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...

HDU5543 Pick The Sticks [背包dp变形]

题意: 用一个线性的箱子放黄金, 金条可以露出来一般而不掉出来。问给定金条长度,价值,箱子长度,问最多能放多少金条。 思路: 如果没有可以露出来的限制,那么为裸的01背包问题。现在多了这个限制,是在状态的定义与转移的时候多了几种情况。 状态:dp[i][0/1/2]表示背包容量为i时, [0]表示没有露出来的金条的情况, [1]表示有一边露出来,[2]表示两边都有露出来的ans 决策: d

Qer的博客 539

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

761C Dasha and Password[简单dp]

C. Dasha and Password time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output After overcoming the stairs Dasha cam

Qer的博客 525

F(x) [数位DP]

For a decimal number x with n digits (A nA n-1A n-2 … A 2A 1), we define its weight as F(x) = A n * 2 n-1 + A n-1 * 2 n-2 + … + A 2 * 2 + A 1 * 1. Now you are given two numbers A and B, please calculat

Qer的博客 502

768D Jon and Orbs[概率dp]

D. Jon and Orbs time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Jon Snow is on the lookout for some orbs re

Qer的博客 500

Balanced Number [数位DP]

题意:一个数字是Balanced number当且仅当存在一个位置loc,使得一个数字的pos位置上的数字dig_pos*(pos-loc)的和是0。 询问区间内有多少这样的数字。 采用数位DP的方法,对于每一个位置,保存状态dp[pos][loc][sum]表示当前位pos位,中心位置为loc,前面的累加和为sum的状态的答案。 执行call()函数的时候,对于一个区间,loc从1到len遍

Qer的博客 496

POJ1837 Balance [背包dp-负值]

题意:给定位置和权重(可以为负值),问位置乘以权重再求和为0的方案数。 思路:用背包dp解决,dp[i][j]表示前i个砝码能凑成和为j的方案数,则dp[n][0]则表示ans, 但存在一个j为负值的情况,所以在所有j 的基础上+10000作为基准。#include<iostream> #include<string> #include<cstdio> #include<cstring> #inc

Qer的博客 488

HDU5781 ATM Mechine [概率dp]

题意:一个人去ATM取钱,知道钱最多有n, 她最多能尝试m次,问如果她足够机智,把所有钱都去做的期望次数是多少。(n <= 2000) 思路:由于足够聪明,二分取钱最坏的情况下只需要11次即可取走所有的钱。 所以预处理m = min(m, 12); 定义状态:dp[i][j]表示已知当前钱数的最大上限为i,还能够取钱的次数为j时候的期望。 决策:尝试取k元钱,k能够被取走的概率为i+1−ki

Qer的博客 476

B-number[数位DP]

题意: 问一个区间内的数字满足能被13整除,且含有子序列13的数字的个数。 采用数位DP, 记录状态dp[pos][sum][statue]表示当前为pos位,前面求和mod13的值为sum,statue状态下的答案。 其中statue==0表示上一位不是1,statue==1表示上一位是1, statue==2表示前面已经出现过13序列了。#include<bits/stdc++.h> usi

Qer的博客 457

HDU5616 Jam's balance[背包dp变形]

题意:给定n个砝码,q次询问是否能够称重量为w的物体,使得天平平衡。 思路: 一开始没有考虑天平两边都能放砝码,即物体可以和砝码同时放到一边,所以误以为是裸背包问题。 问题可以用dp[i][j]表示状态:前i个砝码能否称重量为j的物体使得天平平衡。 其取值为0/1 决策:当前砝码为w[i],dp[i][j]可以由状态dp[i-1][j-w[i]]、dp[i-1][j+w[i]]、dp[i-

Qer的博客 432

Balancing Act [dfs][树dp]

题意:一个树上删掉一个点,使得得到的森林中的最大数的size作为结果,最小化这个结果。 思路:删掉当前节点,得到的最大的树的大小就是dfs序中它所有的儿子的大小和他父树中的大小的最大值。 一遍dfs即可得到sz[]#include<iostream> #include<string> #include<cstdio> #include<cstring> #include<bitset> #incl

Qer的博客 423
上一篇: POJ1837 Balance [背包dp-负值]
下一篇: HDU5543 Pick The Sticks [背包dp变形]
Qer_
博客等级 码龄11年 34粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值