转自: [ametake版权所有]http://blog.csdn.net/ametake欢迎来看 http://blog.csdn.net/ametake/article/details/47664889

题目来自NOIP2007TG3

如果在考场上我现在已经歇菜了吧

今天一整天的时间全部投在这道题上,收获不小。

先上题目

题目描述 Description

【问题描述】
帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m 的矩阵,矩阵中的每个元素aij均
为非负整数。游戏规则如下:
1. 每次取数时须从每行各取走一个元素,共n个。m次后取完矩阵所有元素;
2. 每次取走的各个元素只能是该元素所在行的行首或行尾;
3. 每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分= 被取走的元素值*2i,
其中i 表示第i 次取数(从1 开始编号);
4. 游戏结束总得分为m次取数得分之和。
帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。

输入描述 Input Description

第1行为两个用空格隔开的整数n和m。
第2~n+1 行为n*m矩阵,其中每行有m个用单个空格隔开的非负整数。

输出描述 Output Description

输出 仅包含1 行,为一个整数,即输入矩阵取数后的最大得分。

样例输入 Sample Input

2 3
1 2 3
3 4 2

样例输出 Sample Output

82

数据范围及提示 Data Size & Hint

样例解释

第 1 次:第1 行取行首元素,第2 行取行尾元素,本次得分为1*21+2*21=6
第2 次:两行均取行首元素,本次得分为2*22+3*22=20
第3 次:得分为3*23+4*23=56。总得分为6+20+56=82

【限制】
60%的数据满足:1<=n, m<=30, 答案不超过1016
100%的数据满足:1<=n, m<=80, 0<=aij<=1000

首先读题后,我们发现行与行之间相互独立没有干扰,这样我们就可以读一行处理一行,每一行都是一个单独的问题,相当于给了n组数据,求出答案的和。

这样我们把空间从n²降到了n。

接下来开始考虑思路。不难发现,取走一部分数字后,剩下的数字总是形成一个区间。由于取走的数的个数已知,剩下的数字按顺序的权值也就知道了,由此得出,这是一个区间DP,和石子合并类似。它满足最优子结构,也满足无后效性。

用f[i][j]表示区间[i, j]的最优解,有两种解法

[cpp] view plain copy
  1. f[i][j] = max(a[i]  + 2 * f[i+1][j], a[j] + 2 * f[i][j-1]);//直接计算数的权值
  2. f[i][j] = max(a[i]*2^(m-j+i) + f[i+1][j], a[j]*2^(m-j+i) + f[i][j-1])//每次翻倍

第一种,就是先做一个二的幂次方表,直接计算,很好理解。

第二种,也是更加方便的一种,只需要每次将小区间乘二即可,应用了乘法分配律的原理。进行完整个区间后,区间长度小乘的次数就多,最后的效果也是二的幂次方。应该也不难理解吧。

时间复杂度:O(n*m^2)

这样,我们这道题的框架就出来了,程序如下:

[cpp] view plain copy
  1. //codevs1166 矩阵取数游戏 区间DP+高精
  2. //copyright by ametake
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<algorithm>
  6. using namespace std;
  7. const int maxn=80+5;
  8. const int maxl=32;
  9. int n,m;
  10. int a[maxn],f[maxn][maxn],aa[maxn],bb[maxn],ans[maxn];
  11. int main()
  12. {
  13. int ans=0;
  14. scanf("%d%d",&n,&m);//n行m列
  15. for (int i=1;i<=n;i++)
  16. {
  17. for (int j=1;j<=m;j++) scanf("%d",&a[j]);
  18. for (int j=1;j<=m;j++) f[j][j]=a[j];
  19. for (int j=1;j<=m-1;j++)//区间长度
  20. {
  21. for (int k=1;k<=m-j;k++)//起点
  22. {
  23. int l=k+j;
  24. f[k][l] = max(a[k]  + 2 * f[k+1][l], a[l] + 2 * f[k][l-1]);
  25. }
  26. }
  27. ans+=2*f[1][m];
  28. }
  29. printf("%d\n",ans);
  30. return 0;
  31. }

但是等等,为什么会CE?

我们假设一种极端情况,当矩阵为80*80,且每项为1000时,结果最大,为193428131138340667952988000000。

不用数啦,这个数字是30位的。

既然这样显然我们要用高精度了。我们没有JAVA神奇的大整数,但我们也不必像pascal那样酷比手写,我们有C++的重载运算符(pas也有但是你敢用吗= =被限制的死死的一不小心就报错而且并没有什么用)

第一次手写如此大规模的高精重载,我耗费了整整一上午的时间。

因为没有任何经验,我找到了CSDN IcEnternal的代码。在这里引用一下

[cpp] view plain copy
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;      //代码非原创,来源CSDN用户IcEnternal 源地址http://blog.csdn.net/devillaw_zhc/article/details/7776578
  5. const int power = 1;      //每次运算的位数为10的power次方,在这里定义为了方便程序实现
  6. const int base = 10;      //10的power次方。
  7. //要压位的时候,只需改power 和 base即可,如压万位高精,那么power = 4, base = 10000
  8. const int MAXL = 1001;    //数组的长度。
  9. char a[MAXL], b[MAXL];
  10. struct num
  11. {
  12. int a[MAXL];
  13. num() { memset(a, 0, sizeof(a)); }                      //初始化
  14. num(char *s)                                            //将一个字符串初始化为高精度数
  15. {
  16. memset(a, 0, sizeof(a));
  17. int len = strlen(s);
  18. a[0] = (len+power-1) / power;                       //数的长度
  19. for (int i=0, t=0, w; i < len ;w *= 10, ++i)
  20. {
  21. if (i % power == 0) { w = 1, ++t; }
  22. a[t] += w * (s[i]-'0');
  23. }
  24. //初始化数组,这里自己模拟一下,应该很容易懂的~
  25. }
  26. void add(int k) { if (k || a[0]) a[ ++a[0] ] = k; }     //在末尾添加一个数,除法的时候要用到
  27. void re() { reverse(a+1, a+a[0]+1); }                   //把数反过来,除法的时候要用到
  28. void print()                                            //打印此高精度数
  29. {
  30. printf("%d", a[ a[0] ]);
  31. //先打印最高位,为了压位 或者 该高精度数为0 考虑
  32. for (int i = a[0]-1;i > 0;--i)
  33. printf("%0*d", power, a[i]);
  34. //这里"%0*d", power的意思是,必须输出power位,不够则前面用0补足
  35. printf("\n");
  36. }
  37. } p,q,ans;
  38. bool operator < (const num &p, const num &q)              //判断小于关系,除法的时候有用
  39. {
  40. if (p.a[0] < q.a[0]) return true;
  41. if (p.a[0] > q.a[0]) return false;
  42. for (int i = p.a[0];i > 0;--i)
  43. {
  44. if (p.a[i] != q.a[i]) return p.a[i] < q.a[i];
  45. }
  46. return false;
  47. }
  48. num operator + (const num &p, const num &q)               //加法,不用多说了吧,模拟一遍,很容易懂
  49. {
  50. num c;
  51. c.a[0] = max(p.a[0], q.a[0]);
  52. for (int i = 1;i <= c.a[0];++i)
  53. {
  54. c.a[i] += p.a[i] + q.a[i];
  55. c.a[i+1] += c.a[i] / base;
  56. c.a[i] %= base;
  57. }
  58. if (c.a[ c.a[0]+1 ]) ++c.a[0];
  59. return c;
  60. }
  61. num operator - (const num &p, const num &q)               //减法,也不用多说,模拟一遍,很容易懂
  62. {
  63. num c = p;
  64. for (int i = 1;i <= c.a[0];++i)
  65. {
  66. c.a[i] -= q.a[i];
  67. if (c.a[i] < 0) { c.a[i] += base; --c.a[i+1]; }
  68. }
  69. while (c.a[0] > 0 && !c.a[ c.a[0] ]) --c.a[0];
  70. //我的习惯是如果该数为0,那么他的长度也是0,方便比较大小和在末尾添加数时的判断。
  71. return c;
  72. }
  73. num operator * (const num &p, const num &q)
  74. //乘法,还是模拟一遍。。其实高精度就是模拟人工四则运算!
  75. {
  76. num c;
  77. c.a[0] = p.a[0]+q.a[0]-1;
  78. for (int i = 1;i <= p.a[0];++i)
  79. for (int j = 1;j <= q.a[0];++j)
  80. {
  81. c.a[i+j-1] += p.a[i]*q.a[j];
  82. c.a[i+j] += c.a[i+j-1] / base;
  83. c.a[i+j-1] %= base;
  84. }
  85. if (c.a[ c.a[0]+1 ]) ++c.a[0];
  86. return c;
  87. }
  88. num operator / (const num &p, const num &q)               //除法,这里我稍微讲解一下
  89. {
  90. num x, y;
  91. for (int i = p.a[0];i >= 1;--i)                       //从最高位开始取数
  92. {
  93. y.add(p.a[i]);             //把数添到末尾(最低位),这时候是高位在前,低位在后
  94. y.re();                    //把数反过来,变为统一的存储方式:低位在前,高位在后
  95. while ( !(y < q) )         //大于等于除数的时候,如果小于的话,其实答案上的该位就是初始的“0”
  96. y = y - q, ++x.a[i];   //看能减几个除数,减几次,答案上该位就加几次。
  97. y.re();                    //将数反过来,为下一次添数做准备
  98. }
  99. x.a[0] = p.a[0];
  100. while (x.a[0] > 0 && !x.a[x.a[0]]) --x.a[0];
  101. return x;
  102. }
  103. int main()
  104. {
  105. scanf("%s", a);
  106. scanf("%s", b);
  107. reverse(a, a+strlen(a));
  108. reverse(b, b+strlen(b));
  109. p = num(a), q = num(b);
  110. ans = p + q;
  111. ans.print();
  112. ans = p - q;
  113. ans.print();
  114. ans = p * q;
  115. ans.print();
  116. ans = p / q;
  117. ans.print();
  118. }

上面这位前辈的代码写的相当简明易懂(相比wfwbz同学来说的确是这样),受益匪浅,但他的重载实在结构体外面写的。

我模仿着在结构体里写下了这样的代码(上述代码中并没有):

[cpp] view plain copy
  1. num operator = (int b) //将一个常数赋值给高精结构体
  2. {
  3. num c;
  4. c.a[0]=0;
  5. while (b)
  6. {
  7. c.a[0]++;
  8. c.a[c.a[0]]=b%base;
  9. b/=base;
  10. }
  11. return c;
  12. }

以及

[cpp] view plain copy
  1. num operator + (int b) //高精结构体加常数
  2. {
  3. num c;
  4. c.a[0]=a[0];
  5. c.a[1]+=b;
  6. int i=1;
  7. while (c.a[i]>=base)
  8. {
  9. c.a[i+1]+=c.a[i]/base;
  10. c.a[i]%=base;
  11. i++;
  12. }
  13. if (c.a[c.a[0]+1])++c.a[0];
  14. return c;
  15. }

然而令我百思不得其解的是,这两个代码跑出来都没有效果,具体来说就是这样的:

主函数输出:

[cpp] view plain copy
  1. int main()
  2. {
  3. scanf("%s", a);
  4. scanf("%s", b);
  5. reverse(a, a+strlen(a));
  6. reverse(b, b+strlen(b));
  7. p = num(a), q = num(b);
  8. ans = p + q;
  9. ans.print();
  10. ans=12345;
  11. ans.print();
  12. ans = ans + 50;
  13. ans.print();
  14. while (1);
  15. return 0;
  16. }

结果 输入 111 222
第一次输出333 正确(其他大数据也正确)
第二次输出333 改成return *this输出12345
第三次输出50
如果输入的是大数据 比如一万左右的 第三次输出00050这样类似的

于是我翻出从前wfwbz神犇写的高精模板,参照那个把前面赋值常数改成了下面这样,尽管并不理解为什么,结果成功了

[cpp] view plain copy
  1. num operator = (int b)
  2. {
  3. a[0]=0;
  4. while (b)
  5. {
  6. a[0]++;
  7. a[a[0]]=b%base;
  8. b/=base;
  9. }
  10. return *this;
  11. }

怎么调也没办法,里奥神犇表示爱莫能助。这时候我才深深体会到朋友和前辈的重要性。这道题目的解决,尤其要感谢广饶一中YQL同学和去年一等的那位神犇,清华的HYM神犇以及即将清华的Ag爷WYW神犇,耐心给我解释了两个小时···尤其是HYM前辈,小辈各种无知仍然不要其烦,深受感动。原本发出求助后以为没人注意我,结果一会儿大家都来回答,真的很感动= =

碎碎念到此为止,总之听了各位前辈的讲解总结出以下几点:

1.赋值号和加号作用原理不一样,分开讨论,不能一概而论。

2.对于赋值号,上述做法中的第一种错在不能重新定义一个num c,因为这个变量是局部变量,在整个函数(重载相当于跑一个函数)进行完的时候自动销毁收回内存。那么return c不起作用吗?不起作用。赋值号有自己的返回值。如果这里我们写(ans=123).print(),输出是123,因为这里输出的是返回值,赋值号return c,c=123,就输出123。但是return的这个c并没有赋值给等号左边,只返回一个值但没有效果。

那么怎么办呢?在operator中,对于赋值号左边有一个只在函数内壁生效的名称,那就是this。

this是一个指针,指向赋值号左边的元素。在这里,它指向被复制的num结构体。

也就是说,对*this操作就是在对等号左边操作。比如,我们想使ans.a[0]=b,就可以写(*this).a[0]=b,或者this->a[0]=b;更推荐后面一种写法。

最后,我们返回*this,作为赋值号的返回值。尽管并不太懂得赋值号返回值有什么用,但这样就能保证赋值和输出都正确。

更改后就是上面的第二种写法

3.对于加号,结构体加结构体的话,可以开一个临时结构体c,由于最后起作用的是赋值号,这个c会被赋值给左边的ans。但是,如果写结构体加常数就不可以。

为什么呢?HYM神犇是这样说的

[plain] view plain copy
  1. 这两个确实是不一样的,你先记忆一下好了。大学会学的。

这是什么鬼= =

总之大概是我的智商难以承受的东西吧···ORZ神犇的世界

总之更改之后,应当是这样子:

[cpp] view plain copy
  1. num operator + (const int &b)
  2. {
  3. this->a[1]+=b;
  4. int i=1;
  5. while (this->a[i]>=base)
  6. {
  7. this->a[i+1]+=this->a[i]/base;
  8. this->a[i]%=base;
  9. i++;
  10. }
  11. if (this->a[this->a[0]+1])this->a[0];
  12. return *this;
  13. }

由于成员函数定义在结构体内部,可以用a[1]代替this->a[1],简化后,应当是这样:

[cpp] view plain copy
  1. num operator + (const int &b)//this->都可以省略
  2. {
  3. a[1]+=b;
  4. int i=1;
  5. while (a[i]>=base)
  6. {
  7. a[i+1]+=a[i]/base;
  8. a[i]%=base;
  9. i++;
  10. }
  11. if (a[a[0]+1])a[0]++;
  12. return *this;
  13. }

而且事实上并不需要&b 直接const传数字就好(广饶一中神犇语)

这里还要补充一个小问题,由WYW神犇友情解答:

[cpp] view plain copy
  1. bool operator < (const num &b)const

最后为什么要加const?

答:需要用到stl就要加const。这只是为了兼容一些stl了,加上const声明保证在这个函数里面不会改变结构体成员的值,否则stl会报错。

最后的最后,我之所以调了一下午代码,仅仅是因为一个低级错误:

[cpp] view plain copy
  1. c.a[i]+=a[i]+b.a[i];

应该是+=但我第一次写成了= 这样进位的时候直接挂= =

事实证明,千里之堤,溃于蚁穴。细节决定成败TUT

好了,讲完了,放出代码君:

[cpp] view plain copy
  1. //codevs1166 矩阵取数游戏 区间DP+高精
  2. //copyright by ametake
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<algorithm>
  6. using namespace std;
  7. const int maxn=80+5;
  8. int n,m;
  9. int a[maxn];//以上是非高精类定义
  10. const int power=4;
  11. const int base=10000;
  12. const int maxl=10;
  13. /*
  14. *需要用到
  15. *高精加高精(状态转移时数组加数组)
  16. *高精加单精(状态转移时a[k]+f[i][j])
  17. *重载等号 用于把int赋值给结构体
  18. *把f数组开成结构体,每个结构体都是一个高精数
  19. *按普通数组读入,高精处理
  20. *可以尝试一下,先写出来框架
  21. */
  22. struct num
  23. {
  24. int a[maxl];
  25. num()
  26. {
  27. memset(a,0,sizeof(a));
  28. }
  29. num operator + (const num &b)
  30. {
  31. num c;
  32. c.a[0]=max(a[0],b.a[0]);
  33. for (int i=1;i<=c.a[0];i++)
  34. {
  35. c.a[i]+=a[i]+b.a[i];
  36. c.a[i+1]+=c.a[i]/base;
  37. c.a[i]=c.a[i]%base;
  38. }
  39. if (c.a[c.a[0]+1])++c.a[0];
  40. return c;
  41. }
  42. num operator + (const int &b)//this->都可以省略
  43. {
  44. a[1]+=b;
  45. int i=1;
  46. while (a[i]>=base)
  47. {
  48. a[i+1]+=a[i]/base;
  49. a[i]%=base;
  50. i++;
  51. }
  52. if (a[a[0]+1])a[0]++;
  53. return *this;
  54. }
  55. num operator = (int b)
  56. {
  57. a[0]=0;
  58. while (b)
  59. {
  60. a[0]++;
  61. a[a[0]]=b%base;
  62. b/=base;
  63. }
  64. return *this;
  65. }
  66. bool operator < (const num &b)const//必须加const
  67. {
  68. if (a[0] < b.a[0]) return true;
  69. if (a[0] > b.a[0]) return false;
  70. for (int i = a[0];i > 0;--i)
  71. {
  72. if (a[i] != b.a[i]) return a[i] < b.a[i];
  73. }
  74. return false;
  75. }
  76. void print()
  77. {
  78. printf("%d", a[ a[0] ]);
  79. //先打印最高位,为了压位 或者 该高精度数为0 考虑
  80. for (int i = a[0]-1;i > 0;--i)
  81. printf("%0*d", power, a[i]);
  82. //这里"%0*d", power的意思是,必须输出power位,不够则前面用0补足
  83. printf("\n");
  84. }
  85. }ans,f[maxn][maxn];
  86. int main()
  87. {
  88. scanf("%d%d",&n,&m);//n行m列
  89. for (int i=1;i<=n;i++)
  90. {
  91. for (int j=1;j<=m;j++) scanf("%d",&a[j]);
  92. for (int j=1;j<=m;j++) f[j][j]=a[j];//如何赋值? 可以尝试重载等号
  93. for (int j=1;j<=m-1;j++)//区间长度
  94. {
  95. for (int k=1;k<=m-j;k++)//起点
  96. {
  97. int l=k+j;
  98. //f[k][l] = max(a[k] + f[k+1][l] + f[k+1][l], a[l] + f[k][l-] + f[k][l-1]);//这样写无法识别 除非在结构体外面写 或者重载前加friend
  99. f[k][l] = max(f[k+1][l] + f[k+1][l] + a[k], f[k][l-1] + f[k][l-1] + a[l]);//高精加即可 重载一下加号用于高精加单精
  100. }
  101. }
  102. ans = ans + f[1][m];
  103. ans = ans + f[1][m];
  104. }
  105. ans.print();
  106. return 0;
  107. }
  108. /*
  109. //先写朴素框架,再改成高精版本 16:56
  110. int main()
  111. {
  112. int ans=0;//高精的时候要改
  113. scanf("%d%d",&n,&m);//n行m列
  114. for (int i=1;i<=n;i++)
  115. {
  116. for (int j=1;j<=m;j++) scanf("%d",&a[j]);
  117. for (int j=1;j<=m;j++) f[j][j]=a[j];
  118. for (int j=1;j<=m-1;j++)//区间长度
  119. {
  120. for (int k=1;k<=m-j;k++)//起点
  121. {
  122. int l=k+j;
  123. f[k][l] = max(a[k]  + 2 * f[k+1][l], a[l] + 2 * f[k][l-1]);
  124. }
  125. }
  126. ans+=2*f[1][m];
  127. }
  128. printf("%d\n",ans);
  129. return 0;
  130. }
  131. */</algorithm></cstring></cstdio>

——西塞山前白鹭飞,桃花流水鳜鱼肥

【区间DP+高精】codevs1166 矩阵取数游戏题解相关推荐

  1. 【日常学习】【区间DP+高精】codevs1166 矩阵取数游戏题解

    题目来自NOIP2007TG3 如果在考场上我现在已经歇菜了吧 今天一整天的时间全部投在这道题上,收获不小. 先上题目 题目描述 Description [问题描述] 帅帅经常跟同学玩一个矩阵取数游戏 ...

  2. 【每日一题】7月10日精讲—矩阵取数游戏

    来源:牛客网: 文章目录 题目描述 题解: 代码: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld ...

  3. 【每日DP】day 10、P1005 矩阵取数游戏【区间DP+高精(python)】难度⭐⭐⭐★

    P1005 矩阵取数游戏 输入 2 3 1 2 3 3 4 2 输出 82 说明/提示 NOIP 2007 提高第三题. 数据范围: 60%60\%60% 的数据满足:1≤n,m≤301\le n,m ...

  4. 洛谷P1005 矩阵取数游戏 ACM 大数+区间dp

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n \times mn×m的矩阵,矩阵中的每个元素a_{i,j}ai,j​均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n ...

  5. 【codevs1166】【noip07TG】矩阵取数游戏,新的开始

    1166 矩阵取数游戏 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description [问题描述] 帅帅经 ...

  6. P1005 矩阵取数游戏(__int128模板/简单dp)

    转跳P1005 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n \times mn×m 的矩阵,矩阵中的每个元素 a_{i,j}a i,j ​ 均为非负整数.游戏规则如下: 每次取数时 ...

  7. 洛谷1005 【NOIP2007】矩阵取数游戏

    问题描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...

  8. NOIP2007 提高组【矩阵取数游戏】题解

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素a(i,j)均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n个.经过m次后取完矩阵内所有元素 ...

  9. 矩阵游戏java_矩阵取数游戏JAVA题解

    话不多说,先上题目: 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的nm的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: {C}1. 每次取数时须从每行各取走一个元素,共n个.m次后取完矩 ...

最新文章

  1. log4net 配置参数意思
  2. 如何去掉CodeIgniter URL中的index.php
  3. boost::parameter::deduced相关的测试程序
  4. 如何把html转换成音频网址,怎么把视频转换成音频 视频转换成mp3
  5. JAVA首次课堂测试总结
  6. Spark修炼之道(高级篇)——Spark源码阅读:第六节 Task提交
  7. DB2 乱码
  8. 04. Web大前端时代之:HTML5+CSS3入门系列~HTML5 表单
  9. JFreeChart(六)之3D饼图/条形图
  10. IOC操作Bean管理XML方式(注入集合类型属性)
  11. 实习日志_【人医札记】护理实习日志
  12. 巧用枚举CommandBehavior关闭SqlDataReader联接数据库时的conn.open状态
  13. C源程序括号匹配检查(C语言)
  14. linux中grep的例子,Linux下grep命令使用实例
  15. 电机-PID学习-位置速度串级控制
  16. 举个栗子~Minitab 技巧(6):使用 T 检验 分析产品质量
  17. react-native <0.69 Exceptions.h:5:10: fatal error: ‘fbjni/fbjni.h‘ file not found
  18. 如何用easyx播放音乐,插入图片
  19. [转载]JS和AS交互 作者:ludanlove
  20. c/c++ 报错:非标准语法,使用&创建指向成员的指针的解决办法

热门文章

  1. python+vue+elementUI 高考填报志愿综合参考系统
  2. D-Day 2016 技术分享精选,大牛们的经验漫谈
  3. linux进程被信号杀死,linux杀死进程以及发送或响应信号
  4. C语言时间函数time_t格式化打印...
  5. ENFJ型人格的性格缺陷和心理问题分析
  6. bs7文件.Win7BootUpdater .修改 © MicrosoftCorporation
  7. Ubuntu下tmux的安装和使用
  8. P(A|B)和P(AB)有什么区别
  9. Lumerical---基础问题解答
  10. vs2013删除行快捷键