bzoj3612 平衡 (dp)
设f[i][j]为把i拆成j个不重复的、大于0小于等于N的数的方案数
我们考虑一个方案是怎么来的:(初始状态是f[0][0]=1)
如果这个方案里有1,那它是先把原来的状态的每个数加1、然后再增加一个1
如果这个方案没有1,那它是把原来的状态直接每个数加1得来的
就对应了方程$f[i][j]=f[i-j][j]+f[i-j][j-1]$
但这还不够,还没有限定这个数不能大于N
由于我们每次加的都是1,所以只需要把加出来了N+1的情况减掉就可以
那这个f[i][j]的包含N+1的状态,一定能由f[i-N-1][j-1],就是相当于直接把这个N+1去掉转移过来,把它减下去就可以了
然后枚举左右两边去的个数、再枚举力矩和,统计答案。注意是可以把正中间那个位置去掉的
1 #include<bits/stdc++.h> 2 #define pa pair<int,int> 3 #define CLR(a,x) memset(a,x,sizeof(a)) 4 using namespace std; 5 typedef long long ll; 6 const int maxn=10010,maxk=12; 7 8 inline ll rd(){ 9 ll x=0;char c=getchar();int neg=1; 10 while(c<'0'||c>'9'){if(c=='-') neg=-1;c=getchar();} 11 while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar(); 12 return x*neg; 13 } 14 15 int N,K,P; 16 int f[maxn*maxk][maxk]; 17 18 inline void getf(){ 19 CLR(f,0); 20 f[0][0]=1; 21 for(int i=1;i<=N*(K-1);i++){ 22 for(int j=1;j<K&&i-j>=0;j++){ 23 f[i][j]=f[i-j][j]+f[i-j][j-1]-(i-N-1>=0?f[i-N-1][j-1]:0); 24 f[i][j]%=P; 25 // printf("%d %d %d\n",i,j,f[i][j]); 26 } 27 } 28 } 29 30 int main(){ 31 //freopen("","r",stdin); 32 int i,j,k; 33 for(int t=rd();t;t--){ 34 N=rd(),K=rd(),P=rd(); 35 int ans=0; 36 if(K==1){printf("1\n");continue;} 37 getf(); 38 for(i=1;i<K;i++){ 39 for(j=i;j<=N*i;j++){ 40 ans=(ans+1ll*f[j][i]*f[j][K-i]+1ll*f[j][i]*f[j][K-i-1])%P; 41 // printf("!%d %d %d\n",i,j,ans); 42 } 43 } 44 printf("%d\n",ans); 45 } 46 return 0; 47 }
转载于:https://www.cnblogs.com/Ressed/p/9735702.html
bzoj3612 平衡 (dp)相关推荐
- LeetCode 1653. 使字符串平衡的最少删除次数(DP)
文章目录 1. 题目 2. 解题 1. 题目 给你一个字符串 s ,它仅包含字符 'a' 和 'b' . 你可以删除 s 中任意数目的字符,使得 s 平衡 . 我们称 s 平衡的 当不存在下标 ...
- jzoj4616-[NOI2016模拟7.12]二进制的世界【平衡规划,dp】
正题 题目大意 nnn个数,对于每个数找左边的一个数执行optoptopt操作使得答案最大,并且求有多少个数能够使得最大. 解题思路 我们设fi,jf_{i,j}fi,j表示下一个数的后888位为i ...
- 数位DP 不断学习中。。。。
1, HDU 2089 不要62 :http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:不能出现4,或者相邻的62, dp[i][0],表示不存在不吉 ...
- [HEOI2014]平衡(整数划分数)
下课了,露露.花花和萱萱在课桌上用正三棱柱教具和尺子摆起了一个"跷跷板". 这个"跷跷板"的结构是这样的:底部是一个侧面平行于地平面的正三棱柱教具,上面 摆着一 ...
- ACM之路(16)—— 数位DP
题目就是kuangbin的数位DP. 先讲C题,不要62,差不多就是一个模板题.要注意的是按位来的话,光一个pos是不够的,还需要一维来记录当前位置是什么数字,这样才能防止同一个pos不同数字的dp值 ...
- 1至m为PQ节点,m+1至n-1为PV节点,n为平衡节点
%节点排序:1至m为PQ节点,m+1至n-1为PV节点,n为平衡节点 clear all; clc; data; Y=zeros(n); for i=1:n if X(i,2)~=0; ...
- #1300 : 展胜地的鲤鱼旗(dp)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 岩手县北上市的「北上市立公园展胜地」,是陆奥国三大樱花名所之一.每年的四月中旬到五月初,这里都会举办盛大的祭奠.除了可以在 ...
- POJ 1655 Balancing Act[树的重心/树形dp]
Balancing Act 时限:1000ms Description Consider a tree T with N (1 <= N <= 20,000) nodes numbered ...
- SPOJ - BALNUM Balanced Numbers(数位dp+进制转换)
题目链接:点击查看 题目大意:给出平衡数的定义:每一个偶数出现的次数必须是奇数次,每一个奇数出现的次数必须是偶数次,求给定区间中有多少个平衡数 题目分析:数位dp,这个题目就难在怎么确定状态转移,本来 ...
- HDU - 3709 Balanced Number(数位dp)
题目链接:点击查看 题目大意:将一串数字视为天平,两端平衡的数字称为平衡数,并求出一段闭区间中平衡数的个数.所谓的平衡条件即为力臂与 力相乘后两端的数量和可以抵消,例如数字4139可以视为以3为中轴的 ...
最新文章
- 在Red Hat Linux5下构建LAMP网站服务平台之MySQL、PHP的安装与配置
- 两种底层数据层操作时的架构方式,你喜欢那种?
- 网易云信10月大事记
- vba根据内容调整word表格_给你的word提速
- 大数据先行 传统金融转型需从体制上创新
- python io多路复用_Python之IO多路复用
- Vue2.0 的漫长学习ing-1-5
- 用java来实现列出指定目录下的文件,子目录下的文件也要输出
- Leetcod每日一题:151.reverse-words-in-a-string(翻转字符串里的单词)
- [Web Chart系列之七] 物理动画效果(如撕扯效果)
- ABP之Javascript生成
- bzoj2616:SPOJ PERIODNI
- 关于android studio的配置记录
- android端口扫描工具,Android系统端口扫描器编写初探
- _ie6png图片的修复
- 博途PLC如何通过FB285实现V90 PN的速度控制
- pdf怎么删除其中一页?
- “全包”给装修公司,验收时发现甲醛超标,能要求重装或赔偿吗?
- JSONPath库:使用类似Xpath的语法解析JSON数据
- Zigbee 设置信道,PANID,发射功率
热门文章
- 【渝粤教育】电大中专金融与税收_1作业 题库
- 【RLchina第二讲】 Foundations of Reinforcement Learning
- Pandas系列(八)字符串处理
- linux下的源代码分析工具understand 2014100328681022
- MySQL数据库删除数据(有外键约束)
- 浅谈欧几里得算法求最大公约数(GCD)的原理及简单应用
- 【转】VC6下安装与配置OpenCV1.0
- Postgresql_最新版11.2源码编译安装
- Qt: 非阻塞时间延迟;
- 003自动装配歧义性解决