博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1072排列
阅读量:7092 次
发布时间:2019-06-28

本文共 917 字,大约阅读时间需要 3 分钟。

题目:

好像是这方面的裸题。

整除k 要想转移需要记录下 达到模k所有余数 的方案数。

为了生成排列,状压记录当前已用了原数组中的哪些位置;

因为是无顺序地取用的,所以可以有顺序地放在目标数组中,即续在上一个数后面;所以 导致的余数 就是 之前余数*10+这个数。

  另一种想法是有顺序取用、无顺序放置;即用了前 i 个数,状压记录放在了哪些位置上;新加入一个数的贡献是 之前余数+这个数*1ek。

  感觉第一种比较方便?

循环的顺序需要注意!要把状压的状态 j 放在最外面,而不是当前位置 i 。

dp的初值需要想想。

对于值相等的一些数字,在排列中无区别,dp的时候却有区别地对待了。

  只需要对于每一组,答案除去它们的排列数(即阶乘)即可。

#include
#include
#include
using namespace std;int t,a[15],cnt,k,d[1030][1005],lm,ans,num[15];char ch;int kj[15]={
1,1,2,6,24,120,720,5040,40320,362880,3628800};int main(){ scanf("%d",&t); while(t--) { cnt=0;ans=0; memset(d,0,sizeof d); memset(num,0,sizeof num); d[0][0]=1;///// scanf(" %c",&ch); while(ch>='0'&&ch<='9') { a[++cnt]=ch-'0'; num[a[cnt]]++; ch=getchar(); } lm=(1<

 

转载于:https://www.cnblogs.com/Narh/p/8673665.html

你可能感兴趣的文章
概念——统一资源定位符(Uniform / Universal Resource Locator,URL)
查看>>
Apache HttpComponents 获取Cookie
查看>>
彻底理解jdbc为什么用反射创建驱动程序对象
查看>>
Oracle内存管理(之五)
查看>>
[nio]dawn的基本概念
查看>>
【数据库摘要】6_Sql_Inner_Join
查看>>
交叉熵代价函数(损失函数)及其求导推导
查看>>
Android UI开源框架
查看>>
Java 构造时成员初始化的陷阱
查看>>
CentOS7.1 Liberty云平台之环境准备(2)
查看>>
js正则表达式test方法、exec方法与字符串search方法区别
查看>>
4.终端
查看>>
优秀的 Spring Cloud 开源软件
查看>>
mysql数据库的简单语句的介绍(1)
查看>>
HDU 2829 Lawrence (斜率DP)
查看>>
visual studio 2012 update3
查看>>
特征值和特征向量的几何意义、计算及其性质
查看>>
Spring framework3.2整合hibernate4.1报错:No Session found for current thread
查看>>
zqgame《每日一言》
查看>>
前端与后端分离的架构实例(一)
查看>>