一些杂题(排列组合
时间:2020-01-18
本文章向大家介绍一些杂题(排列组合,主要包括一些杂题(排列组合使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
排列组合小结
一.背景
今天做了几道题。有点小心得。
二.第二类stirling数
题面:
分析:用一下递推在加一个高精度cao过去
code:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n,m,s[105][10005];
char ch[10005];
inline void out(int *a){
int fl=0;
for(int i=a[0];i>=1;--i){
if(a[i])fl=1;
if(fl)cout<<a[i];
}
cout<<endl;
}
inline void add(int *a,int *b,int *c){
if(a[0]>b[0])add(b,a,c);
else{
memset(c,0,sizeof(int)*10005);
int i;
for(i=1;i<=a[0];++i){
int res=a[i]+b[i]+c[i];
if(res>=10)res-=10,c[i+1]++;
c[i]=res;
}i=a[0]+1;
while(i<=b[0]){
int res=b[i]+c[i];
if(res>=10)res-=10,c[i+1]++;
c[i]=res;
++i;
}
if(c[b[0]+1]!=0)c[0]=b[0]+1;
else c[0]=b[0];
}
}
inline void mul(int *a,int b,int *c){
memset(c,0,sizeof(int)*10005);
int i;
for(i=1;i<=a[0];++i){
int res=a[i]*b+c[i];
if(res>=100)c[i+2]+=res/100,res%=100;
if(res>=10)c[i+1]+=res/10,res%=10;
c[i]=res;
}
if(c[a[0]+2]!=0)c[0]=a[0]+2;
else if(c[a[0]+1]!=0)c[0]=a[0]+1;
else c[0]=a[0];
}
int main(){
cin>>n>>m;int u[10005];
s[1][0]=1;s[1][1]=1;
//add(s[1],s[1],u);out(u);
for(int i=1;i<=n;++i){
for(int j=i;j>=1;--j){
mul(s[j],j,u);
add(u,s[j-1],s[j]);//out(s[j]);
}
}
out(s[m]);
}
三.核电站问题
相信大家都见过这个东西,虽然只是很简单的一个递推,但是它是可以作为一个反向解答的利器。核电站的核心思想是找出连续相同的项数不超过n的情况。如何引用下面会举例
下面挂一个核电站的核心code
f[0]=1;
for(int i=1;i<=n;++i){
if(i<m)f[i]=f[i-1]*2;
else if(i==m)f[i]=f[i-1]*2-1;
else f[i]=2*f[i-1]-f[i-m-1];
}
四.危险的组合
题面:有一些装有铀元素(用U表示)和铅元素(用L表示)的盒子,数量足够多,要求将N个盒子排成一行,但至少有M个U放在一起,有多少种方法?
思路:看起来,好像不太好做。但是我们可以从总数中剔除没有M个U放在一起的情况,此所谓正难反易。
挂一个code
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll MAXN=10000000,mod=1000000007;
ll n,m,k,f[MAXN];
ll ans;
ll KSM(ll a,ll b,ll mod){
ll p=1;
while(b){
if(b&1)p*=a;
b>>=1;
a=a*a;
}
return p;
}
int main(){
cin>>n>>m;
f[0]=1;
for(int i=1;i<=n;++i){
if(i<m)f[i]=f[i-1]*2;
else if(i==m)f[i]=f[i-1]*2-1;
else f[i]=2*f[i-1]-f[i-m-1];
}
cout<<KSM(2,n,mod)-f[n]<<endl;
}
原文地址:https://www.cnblogs.com/clockwhite/p/12209619.html
- Canvas 图片平铺设置
- Canvas 给图形绘制阴影
- State模式的经典应用场景:订单处理(c#实现)场景描述遇到问题解决问题走起
- ASP.NET SignalR 2.0入门指南介绍SignalRSignalR和WebSocket传输和回滚HTML5 传输协议Comet transports传输协议选择过程监测传输指定传输协议连接
- ASP.NET5之客户端开发:Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用Grunt和Gulp使用Grunt准备项目配置NPM配置Grunt集成起来监测文件变化与V
- 有趣的算法(三)——Hash算法
- JavaScript中的数据类型
- Logistic回归算法及Python实现
- <script>元素在XHTML中的用法
- 有趣的算法(四)——一致性Hash算法模拟redis集群
- ASP.NET5 中静态文件的各种使用方式服务端的静态文件开启目录浏览呈现默认文件使用UseFileServer方法文件类型基于IIS的考虑最佳实践
- 使用ASP.NET Identity以手机短信实现双重验证创建一个ASP.NET 5项目运行应用程序使用SMS短信进行双重验证开启双重验证使用双重验证登陆应用程序禁用账户来防止暴力破解
- ASP.NET 5 之 错误诊断和它的中间件们配置错误处理页面在Development阶段使用错误页面运行时信息页面欢迎页面
- 有趣的算法(五) ——Dijkstra双栈四则运算
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- P1567 统计天数
- P1089 津津的储蓄计划(模拟训练)
- 二分练习 --D - Trailing Zeroes (III)
- HDU 5806
- B - They Are Everywhere CodeForces - 701C
- 尺取练习 -A - A - Stages (水题压压惊)
- 填坑-回溯-预习 之 二分-尺取大总结
- 深入浅出理解动态规划(一) | 交叠子问题
- 深入浅出理解动态规划(二) | 最优子结构
- 用x种方式求第n项斐波那契数,99%的人只会第一种
- 面试官:手撕十大排序算法,你会几种?
- 如何在Integer类型的ArrayList中同时添加String、Character、Boolean等类型的数据?
- Java开发岗面试题--基础篇(一)
- leetcode链表之找出倒数第k个节点
- MAC下安装nginx的正确姿势 实践笔记