近期学习规划
无干货~
纯粹是个人的学习记录~~
四维偏序
Rectangle 矩形藏宝地
数据库 http://blog.csdn.net/baolibin528/article/details/43173175
http://blog.csdn.net/tham_/article/details/68555100
http://blog.csdn.net/braketbn/article/details/51187181
hdu5809
hdu4347
数据结构https://blog.sengxian.com/
c++精度问题here
同余 ?http://blog.csdn.net/guhaiteng/article/details/52588223
后缀数组:链接
后缀自动机: 学习链接
最短路here
Lucas定理&扩展Lucas定理&BSGS算法&扩展BSGS算法 :链接
http://www.cnblogs.com/general10/p/7380607.html (忘了这是什么...)
lrj142
概率: 链接
线性基:链接
数学: 链接
背包:http://love-oriented.com/pack/Index.html
博弈:http://blog.csdn.net/theprinceofelf/article/details/7225206
http://blog.sina.com.cn/s/blog_83d1d5c70100y9yd.html
http://www.360doc.com/content/15/0616/16/21207324_478544573.shtml
http://www.360doc.com/content/15/0616/17/21207324_478562105.shtml
http://www.360doc.com/content/16/0313/12/21207324_541805330.shtml
状压dp:http://blog.csdn.net/jiangzh7/article/details/8742734
矩阵相关:http://blog.csdn.net/wust_zzwh/article/details/52058209
dp: 法官那个题http://www.cnblogs.com/kuangbin/archive/2011/08/04/2126809.html
http://blog.csdn.net/lyy289065406/article/details/6671105
游戏那个题http://www.cnblogs.com/tom987690183/p/3647012.html
数位dp:https://wenku.baidu.com/view/d2414ffe04a1b0717fd5dda8.html
hdu2062:http://blog.csdn.net/lianqi15571/article/details/8877014
1 /* 2 考虑一个集合 An = { 1, 2, ..., n}。比如,A1={1},A3={1,2,3}。我们称一个非空子集元素的排列为一个子集序列。 3 对所有的子序列按字典顺序排序。你的任务就是给出第m个子序列。 4 5 6 详细题解:http://blog.csdn.net/lianqi15571/article/details/8877014 7 不难发现,An可以按首数字分成n组,而每组里除了第一项,剩下的就是An-1的子集合了。 8 ∴f(n) = n[f(n-1) + 1] 9 f(1) = 1 10 11 本题目的关键是先求的An中每一组的个数g(n) 12 不难得出:g(n) = f(n) / n 13 ∵f(n) = n[f(n-1) + 1] 14 ∴g(n) = n[f(n-1) + 1] / n = f(n-1) + 1 15 ∵f(n-1) = (n-1) * g(n-1) 16 ∴g(n) = (n-1) * g(n-1) + 1 17 18 */ 19 20 #include<cstdio> 21 #define ll long long 22 23 int main() 24 { 25 int i,n,t;//n:一共多少元素<=20。t:所求子集位于分组后的第几组 26 ll m;//位于第几个子集 27 ll c[21]={0};//后面将子集分组后平均每组个数,如:c[2]表示n=2时的分组每组中子集数 28 int s[21];//后面将子集按字典序分组后每组的初始首元素,组数<=20 29 30 31 for (i=1;i<21;i++) 32 c[i]=c[i-1]*(i-1)+1;//推导出来的c[n]=(n-1)*c[n-1]+1 33 while (scanf("%d%I64d",&n,&m)!=EOF) 34 { 35 for(i=0;i<21;i++) 36 s[i]=i;//每循环一次就重新归位每组首元素 37 while (n>0&&m>0) 38 { 39 t=m/c[n]+(m%c[n]>0?1:0); 40 if(t>0)//得到第m个子集在分组后的第t组,若t>0 41 { 42 printf("%d",s[t]); 43 for(i=t;i<=n;i++) 44 s[i]=s[i+1];//或s[i]+=1,我们发现:第n组中,第2个元素在第n个时变为它的下一个数 45 m-=((t-1)*c[n]+1);//减去(t-1组总子集数+1),m变为表示在剩余子集中位于第几个 46 putchar(m==0?'\n':' '); 47 } 48 n--;//依次递减,直到执行上面的if代码或退出 49 } 50 51 52 } 53 return 0; 54 }