有一个串,有黑色和白色两种元素.一次操作可以把最上面的白色元素变成黑色,同时把这个元素上面的所有元素变成白色. 给你一个30以内的串,计算变成全黑时,元素变化的总和. 我用的方法比较笨,打表处理了1-30个全白串变黑的ans,然后模拟,借助打表的结果计算出答案. 其实,每出现一个白色元素 cnt+=(1<<i+1)-1即可: #include <cstdio> #include <algorithm> #include <cstring> using nam…
T1 X国的军队 贪心,按$b-a$的大小降序排序,然后就贪心吧 #include<iostream> #include<cstdio> #include<algorithm> #define ll long long using namespace std; struct node { ll a,b,las; }h[]; ll T,n,ans; ll read() { ll aa=,bb=;char cc=getchar(); ;cc=getchar();} +cc-…
题面:https://www.cnblogs.com/Juve/articles/11615883.html X 国的军队: 好像有O(T*N)的直接贪心做法 其实多带一个log的二分也可以过 先对所有据点按b-a由大到小排序(按此方案排序后顺序扫是最优的) 然后二分答案 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define int long lon…
T3:搜索 很出名的题吧,费解的开关 同T2一样也是一题很考思考的 附上题解再解释吧: 对于每个状态,算法只需要枚举第一行改变哪些灯的状态,只要第一行的状态固定了,接下来的状态改变方法都是唯一的:每一行需要改变状态的位置都在上一行中不亮的灯的正下面,因为只有这样才能使上一行的灯全亮.我们枚举第一行的状态改变方法(共2^5种),对于每种方法都依次改变下面几行的状态使上面一行灯全亮.到最后一行我们需要判断是否最后一行也恰好全亮,并更新最小步数. 首先需要找到第一行的状态,怎么写?枚举深搜啊 找到了其…
个人感觉这篇文章(原文地址见文章尾)写的排列组合问题,非常的好,而且是一步一步引出排列组合问题,我也是看了这篇文章,一步一步按照这个思路来,最后会了自己的一套排列组合 也因此在算法竞赛中,两次用到了,成功解决了问题. 第一个问题: 首先,先让我们来看第一个问题, 有1,2,3,4这4个数字.可以重复的在里面选4次,问能得到多少种结果.easy 1 1 1 1 1 1 1 2 1 1 1 3 1 1 1 4 1 1 2 1 1 1 2 2 ....... 4 4 4 3 4 4 4 4 代码实现其…
学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底层.--F 既不住顶层也不住底层.M 住得比 C 高.--S 住的楼层和 F 不相邻.--F 住的楼层和 C 不相邻. create table pailie (rnam varchar(20) ) select 'B' as rnam into #y union select 'C' union…
今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几篇文章推荐给大家.最近在计算足球彩票结果组合过程中,使用的到了其功能,生成排列,非常具有代表性,而且也有网友咨询过类似的问题,所以就封装为扩展方法,方便调用. NET开源目录:[目录]本博客其他.NET开源项目文章目录 彩票数据资料目录:[目录]C#搭建足球赛事资料库与预测平台与彩票数据分析目录 本…
       本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1.[原创]开源.NET排列组合组件KwCombinatorics使用(一)—组合生成  2.[原创]开源.NET排列组合组件KwCombinatorics使用(二)——排列生成 3.[原创]开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合   前言 本文今天介绍的.NE…
       本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1.[原创]开源.NET排列组合组件KwCombinatorics使用(一)—组合生成  2.[原创]开源.NET排列组合组件KwCombinatorics使用(二)——排列生成 3.[原创]开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合 前言 本文今天介绍的.NET开…
       本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1.[原创]开源.NET排列组合组件KwCombinatorics使用(一)—组合生成  2.[原创]开源.NET排列组合组件KwCombinatorics使用(二)——排列生成 3.[原创]开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合 前言 本文今天介绍的.NET开…
题意: 有n种物品,并且知道每种物品的数量ki.要求从中选出m件物品的排数.         (全题文末) 知识点: 普通母函数 指数型母函数:(用来求解多重集的排列问题) n个元素,其中a1,a2,····,an互不相同,进行全排列,可得n!个不同的排列. 若其中某一元素ai重复了ni次,全排列出来必有重复元素,其中真正不同的排列数应为 ,即其重复度为ni! 同理a1重复了n1次,a2重复了n2次,····,ak重复了nk次,n1+n2+····+nk=n. 对于这样的n个元素进行全排列,可得…
一般用dfs来做 最简单的一种: 17. Letter Combinations of a Phone Number Given a digit string, return all possible letter combinations that the number could represent. A mapping of digit to letters (just like on the telephone buttons) is given below. Input:Digit s…
用php实现的排列组合算法.使用递归算法,效率低,胜在简单易懂.可对付元素不多的情况. //从$input数组中取$m个数的组合算法 function comb($input, $m) { if($m==1) { foreach($input as $item) { $result[]=array($item); } return $result; } for($i=0;$i<=count($input)-$m;$i++) { $nextinput=array_slice($input,$i+1…
本文是对以往学习的多线程中知识点的一个整理. 多线程中的队列有:串行队列,并发队列,全局队列,主队列. 执行的方法有:同步执行和异步执行.那么两两一组合会有哪些注意事项呢? 如果不是在董铂然博客园看到这边文章请 点击查看原文 提到多线程,也就是四种,pthread,NSthread,GCD,NSOperation 其中phtread是跨平台的.GCD和NSOperation都是常用的,后者是基于前者的. 但是两者区别:GCD的核心概念是将一个任务添加到队列,指定任务执行的方法,然后执行. NSO…
Combinations 题意: 根据给定的n和k,生成从1到n范围内长度为k的排列组合 示例: n=4 k=2 [[1, 2], [1, 3], [1, 4], [2, 1], [2, 3], [2, 4], [3, 1], [3, 2], [3, 4], [4, 1], [4, 2], [4, 3]] 解题: 正常情况下我们通常想到的都是通过使用递归,以枚举的形式来生成组合.先从给定的范围中拿一个数出来,把它同剩下的每一个数进行组合,然后再在每个组合上对不存在于组合的每个数进行合并,这样依次…
传送门 Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of student want to get back to school by train(because the trains in the Ignatius Train Station is the fastest all over the world ^v^). But here comes a pr…
最近编程经常遇到需要 排列&&组合(求子集) 的问题:遂整理一下. 1. 数字的排列与组合(递归):O(n!),O(nC(n,k)) * O(n) #include <stdio.h> int arr[100]; void init(int N) { for(int i = 0; i < N; ++i) arr[i] = i+1; } void print(int a[], int n) { for(int i = 0; i < n; ++i) printf(&qu…
今天群里有朋友求一个排列组合算法,题目是给定长度,输出所有指定字母的组合. 如指定字母a.b.c.d.e.f,长度为2,则结果应为:aa.ab.ac ... ef.ff. 有朋友给出算法,很有特色: var n = 0; for (int i = 0; i < Math.Pow(26, n); ++i) { int t = i; string str = ""; for (int j = n - 1; j >= 0; --j) { int s = (int)Math.Pow…
最近工作项目需要用到js排列组合,于是就写了一个简单的demo. 前几天在网上找到一个写全排列A(n,n)的code感觉还可以,于是贴出来了, 排列的实现方式: 全排列主要用到的是递归和数组的插入 比如12的全排列,首先把1拿出来放到elementCur,再获取由1组成的数组[2],然后在循环把1插入到0,1的位置后再返回1,2][2,1] 如果是123那么首先获取23的全排列[2,3][3,2],然后在插入1,[1,2,3][2,1,3][2,3,1][1,3,2][3,1,2][3,2,1]…
Machine scheduling Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1000    Accepted Submission(s): 363 Problem Description A Baidu's engineer needs to analyze and process large amount of data o…
排列组合 Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status Description 有n种物品,并且知道每种物品的数量.要求从中选出m件物品的排列数.例如有两种物品A,B,并且数量都是1,从中选2件物品,则排列有"AB","BA"两种.    Input 每组输入数据有两行,第一行是二个数n,m(1<=m,n<=10)…
题目是在n*n的棋盘上放k个车使其不互相攻击的方案数. 首先可以明确的是n*n最多只能合法地放n个车,即每一行都指派一个列去放车. dp[i][j]表示棋盘前i行总共放了j个车的方案数 dp[0][0]=1 转移就是从第i-1行转移到第i行,对于第i行要嘛放上一个车要嘛不放,放的话有n-j-1种方法.即dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*(n-j-1). #include<cstdio> #include<cstring> using namespac…
排列组合 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1736    Accepted Submission(s): 726 Problem Description有n种物品,并且知道每种物品的数量.要求从中选出m件物品的排列数.例如有两种物品A,B,并且数量都是1,从中选2件物品,则排列有"AB","BA&quo…
排列组合的概念 排列:从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列(Arrangement). 组合:从m个不同的元素中,任取n(n≤m)个元素为一组,叫作从m个不同元素中取出n个元素的一个组合. 排列组合实现代码 上一个项目做的一个水路的路径规划时,用到了排列的数据结构.求任意N个点里M个点的不同顺序的组合个数. 这样求最优路径.下面贴一段不知道哪里找的排列组合的算法. public class PermutationAndCombin…
题目:给定1-n数字,排列组合. 解法:递归.第一个数字有n种选择,第二个数字有n-1种选择,依次递归排列输出.用数组表示n个数字,用过的数字置0. 实现语言:C++ #include <iostream> using namespace std; /************************************************************************/ /* num : 需要排列的数组 count : 数组总数 numC: 已经排列的数组 iUse:…
// 排列组合+组合数取模 HDU 5894 // 题意:n个座位不同,m个人去坐(人是一样的),每个人之间至少相隔k个座位问方案数 // 思路: // 定好m个人 相邻人之间k个座位 剩下就剩n-(m+1)*k个座位 // 剩下座位去插m个不同的盒子==就等价n个相同的球放m个不同的盒子 // 然后组合数出来了 // 乘n的话是枚举座位,除m是去掉枚举第一个座位的时候,剩下人相邻的座位相对不变的情况 #include <iostream> #include <algorithm>…
D. Holidays Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/problem/D Description Everyone knows that the battle of Endor is just a myth fabled by George Lucas for promotion of his movie. Actually, no battle of Endor has…
C. Kyoya and Colored Balls Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/554/problem/C Description Kyoya Ootori has a bag with n colored balls that are colored with k different colors. The colors are labeled from 1 to k.…
题目说每个相同文件(01串)都被撕裂成两部分,要求拼凑成原来的样子,如果有多种可能输出一种. 我标题写着排列组合,其实不是什么高深的数学题,只要把最长的那几个和最短的那几个凑一起,然后去用其他几个验证就行了,反正我的验证是非常暴力的,看起来...(其实加了个二维数组判定不是很吃复杂度) 代码: #include <string> #include <cstring> #include <stdio.h> #include <algorithm> #inclu…
这道题在LA是挂掉了,不过还好,zoj上也有这道题. 题意:好大一颗树,询问父子关系..考虑最坏的情况,30w层,2000w个点,询问100w次,貌似连dfs一遍都会TLE. 安心啦,这肯定是一道正常人能做的题目.不过是需要几个小技巧. 1.2000w个点不一定都要保存下来,事实上,虽然题目给了256M的空间,只要开了两个这么大的数组,MLE是跑不了的,所以只保存30w个父节点. 2.如果这30w个父节点构成一条链,dfs的栈肯定爆.所以需要用栈模拟dfs.这里用的是stack<int>,当然…