当前位置: 首页 > 编程日记 > 正文

vijos 1006 晴天小猪历险记之Hill——数字三角形的终极变化

题目链接:https://vijos.org/p/1006

数字三角形原题看这里:http://www.cnblogs.com/huashanqingzhu/p/7326837.html

背景

在很久很久以前,有一个动物村庄,那里是猪的乐园(^_^),村民们勤劳、勇敢、善良、团结……
不过有一天,最小的小小猪生病了,而这种病是极其罕见的,因此大家都没有储存这种药物。所以晴天小猪自告奋勇,要去采取这种药草。于是,晴天小猪的传奇故事便由此展开……

描述

这一天,他来到了一座深山的山脚下,因为只有这座深山中的一位隐者才知道这种药草的所在。但是上山的路错综复杂,由于小小猪的病情,晴天小猪想找一条需时最少的路到达山顶,但现在它一头雾水,所以向你求助。

山用一个三角形表示,从山顶依次向下有1段、2段、3段等山路,每一段用一个数字T(1<=T<=100)表示,代表晴天小猪在这一段山路上需要爬的时间,每一次它都可以朝左、右、左上、右上四个方向走。山是环形的。(**注意**:在任意一层的第一段也可以走到本层的最后一段或上一层的最后一段)。

晴天小猪从山的左下角出发,目的地为山顶,即隐者的小屋。

★★★**本题为vijos早年陈题,描述晦涩,现重新描述题面如下**★★★
有一个数字三角形,共nn行,依次编号为第一行,第二行至第nn行。其中第ii行有ii个数字,位置依次记为(i,1),(i,2)(i,1),(i,2)到(i,i)(i,i)。
现在从第nn层的第一个位置出发(即(n,1)),每一步移到相邻的,且行编号小于或等于当前行编号的一个位置中,直到(1,1)结束,在不重复经过任何位置的情形下,路过的所有位置(包括端点)的对应数字之和最小。

下面详细定义相邻关系。
同一层内连续的两个位置相邻,特别的有每一层第一个位置与最后一个位置相邻。
对于位置(i,j),它与(i-1,j-1)以及(i-1,j)相邻,特别的(i,1)(i-1,i-1)相邻,且(i,i)(i-1,1)相邻。

格式

输入格式

第一行有一个数n(2<=n<=1000),表示山的高度。

从第二行至第n+1行,第i+1行有i个数,每个数表示晴天小猪在这一段山路上需要爬的时间。

输出格式

一个数,即晴天小猪所需要的最短时间。

样例1

样例输入1

5
1
2 3
4 5 6
10 1 7 8
1 1 4 5 6

样例输出1

10

限制

各个测试点1s

提示

在山的两侧的走法略有特殊,请自己模拟一下,开始我自己都弄错了……

来源

Sunnypig

算法分析:

参考:

http://blog.csdn.net/Little_Flower_0/article/details/47945611

https://vijos.org/p/1006/solution

http://www.cnblogs.com/candy99/p/5981533.html

 算法一:

建立图,然后求最短路径。(来源)

(从上往下建)

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cstring>
 5 #include <cmath>
 6 #include <queue>
 7 using namespace std;
 8 typedef long long ll;
 9 const int N=1005*1005/2,INF=1e9+5;
10 inline int read(){
11     char c=getchar();int x=0,f=1;
12     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
13     while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
14     return x*f;
15 }
16 int n,t[N],u,v,w;
17 inline int id(int i,int j){
18     return i*(i-1)/2+j;
19 }
20 struct edge{
21     int v,ne;
22 }e[N<<1];
23 int cnt=0,h[N];
24 inline void add(int u,int v){
25     cnt++;
26     e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt;
27 }
28 inline void ins(int u,int v){
29     add(u,v);add(v,u);
30 }
31 int d[N],inq[N];
32 queue<int> q;
33 void spfa(int s){
34     int m=id(n,n);
35     for(int i=1;i<=m;i++) d[i]=INF;
36     d[s]=0;
37     q.push(s);
38     while(!q.empty()){
39         int u=q.front();q.pop();
40         inq[u]=0;
41         for(int i=h[u];i;i=e[i].ne){
42             int v=e[i].v,w=t[u];
43             if(d[v]>d[u]+w){
44                 d[v]=d[u]+w;
45                 if(!inq[v]){inq[v]=1;q.push(v);}
46             }
47         }
48     }
49 }
50 int main(){
51     n=read();
52     for(int i=1;i<=n;i++){
53         if(i!=1) ins(id(i,1),id(i,i));
54         if(i<n&&i!=1){
55             add(id(i,i),id(i+1,1));
56             add(id(i,1),id(i+1,i+1));
57         }
58         for(int j=1;j<=i;j++){
59             t[id(i,j)]=read();
60             if(j<i) ins(id(i,j),id(i,j+1));
61             if(i<n) add(id(i,j),id(i+1,j)),add(id(i,j),id(i+1,j+1));            
62         }
63     }
64     spfa(id(1,1));
65     printf("%d",d[id(n,1)]+t[id(n,1)]);
66 }
View Code

或者参考下面的这一段代码:

最短路很容易~
但是建图有点麻烦~~
因为考虑到如果从一个点往上连边的话
会有点小麻烦(可能不存在~)
那么我们可以从每一个点开始
每一个可以走到它的点向他连边
即向下找往上连
如果是在一行的首位置或者末位置就有5种被走上来的方法
否则四种走法
这个需要很小心注意一个地方写错了就gg(调了半小时)
好坑的地方就是这里的右上方=上方....
害怕~
然后用个等差数列求和公式求出对应的顶标就好啦~

代码来源:https://vijos.org/p/1006/solution

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <algorithm>
  4 #include <cstring>
  5 #include <queue>
  6 using namespace std;
  7 
  8 const int MAXn=1005;
  9 const int MAXN=500501;
 10 const int MAXM=2500001;
 11 const int INF=(1<<30)-1;
 12 struct Edge
 13 {
 14     int to,w,next;
 15 }e[MAXM];
 16 int fisrt[MAXN];//Edges
 17 queue<int> q;
 18 int d[MAXN],in[MAXN];//SPFA
 19 int w[MAXn][MAXn];
 20 int l,n,tot;
 21 
 22 inline void Add_Edge(int x,int y,int w)
 23 {
 24     e[++tot].to=y;  e[tot].w=w;
 25     e[tot].next=fisrt[x];   fisrt[x]=tot;
 26 }
 27 
 28 inline int getn(int x,int y)
 29 {
 30     return x*(x-1)/2+y;
 31 }
 32 
 33 void init()
 34 {
 35     memset(fisrt,-1,sizeof(fisrt));
 36     scanf("%d",&l); n=getn(l,l);
 37     for(int i=1;i<=l;i++)
 38         for(int j=1;j<=i;j++)
 39             scanf("%d",&w[i][j]);
 40 }
 41 
 42 void getmap()//建图从上向下建更方便
 43 {
 44     Add_Edge(2,1,w[2][1]);
 45     Add_Edge(3,1,w[2][2]);
 46     for(int i=2;i<=l;i++)
 47         for(int j=1;j<=i;j++)
 48         {
 49             int u=getn(i,j);
 50             if(j==1)
 51             {
 52                 Add_Edge(getn(i,i),u,w[i][i]);
 53                 Add_Edge(getn(i,j+1),u,w[i][j+1]);
 54                 if(i!=l)
 55                     Add_Edge(getn(i+1,i+1),u,w[i+1][i+1]),
 56                     Add_Edge(getn(i+1,j),u,w[i+1][j]),
 57                     Add_Edge(getn(i+1,j+1),u,w[i+1][j+1]);
 58             }
 59             else    if(j==i)
 60             {
 61                 Add_Edge(getn(i,j-1),u,w[i][j-1]);
 62                 Add_Edge(getn(i,1),u,w[i][1]);
 63                 if(i!=l)
 64                     Add_Edge(getn(i+1,j),u,w[i+1][j]),
 65                     Add_Edge(getn(i+1,1),u,w[i+1][1]),
 66                     Add_Edge(getn(i+1,j+1),u,w[i+1][j+1]);
 67             }
 68             else
 69             {
 70                 Add_Edge(getn(i,j-1),u,w[i][j-1]);
 71                 Add_Edge(getn(i,j+1),u,w[i][j+1]);
 72                 if(i!=l)
 73                     Add_Edge(getn(i+1,j),u,w[i+1][j]),
 74                     Add_Edge(getn(i+1,j+1),u,w[i+1][j+1]);
 75             }
 76         }
 77 }
 78 
 79 void SPFA(int s)
 80 {
 81     memset(d,0x37,sizeof(d));
 82     q.push(s);  d[s]=0;  in[s]=1;
 83     while(!q.empty())
 84     {
 85         int u=q.front();    q.pop();    in[u]=0;
 86         for(int i=fisrt[u];i!=-1;i=e[i].next)
 87         {
 88             int& v=e[i].to; int& w=e[i].w;
 89             if(d[v]>d[u]+w)
 90             {
 91                 d[v]=d[u]+w;
 92                 if(!in[v])
 93                 {
 94                     q.push(v);
 95                     in[v]=1;
 96                 }
 97             }
 98         }
 99     }
100     cout<<d[1]+w[1][1]<<endl;
101 }
102 
103 int main()
104 {
105     init();
106     getmap();
107     SPFA(getn(l,1));
108 }
View Code

 算法二:动态规划

说实话,上面那一长段的关于动规算法的描述,我是真没看懂,直接看代码还大概清楚一点。

下面代码中,f[i][j]表示从(i,j)这个位置到达顶部(1,1)这个位置的最短距离。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cstring>
 5 using namespace std;
 6 
 7 const int maxn=1005;
 8 int a[maxn][maxn];
 9 int f[maxn][maxn];
10 int n;
11 
12 int main()
13 {
14     cin>>n;
15     for(int i=1;i<=n;i++)
16         for(int j=1;j<=i;j++)
17         cin>>a[i][j];
18     f[1][1]=a[1][1];//终点处就直接是该点时间
19     for(int i=2;i<=n;i++)//一层一层往上推
20     {
21         for(int j=2;j<i;j++)//先求出从上一层推出来的最小值
22             f[i][j]=min(f[i-1][j],f[i-1][j-1])+a[i][j];
23         f[i][1]=min(f[i-1][1],f[i-1][i-1])+a[i][1];//特殊边界点处理
24         f[i][i]=min(f[i-1][i-1],f[i-1][1])+a[i][i];//特殊边界点处理
25         //同一层更新最优解
26         for(int k=i-1;k>0;k--)//从右往左推 从右往左走的情况更新
27             f[i][k]=min(f[i][k],f[i][k+1]+a[i][k]);
28         f[i][i]=min(f[i][i],f[i][1]+a[i][i]);
29 
30         for(int l=2;l<=i;l++)//从左往右推 从左往右走的情况更新
31             f[i][l]=min(f[i][l],f[i][l-1]+a[i][l]);
32             f[i][1]=min(f[i][1],f[i][i]+a[i][1]);
33         //我也没太明白为何需要下面这两个for,把上面的事情再做一遍。我把下面这两个for屏蔽以后确实是可以AC的。假如真有原因,估计要读上面那一长段文字了
34         for(int k=i-1;k>0;k--)//再推一遍从右往左推 从右往左走的情况更新
35             f[i][k]=min(f[i][k],f[i][k+1]+a[i][k]);
36             f[i][i]=min(f[i][i],f[i][1]+a[i][i]);
37 
38         for(int l=2;l<=i;l++)//再推一遍从左往右推 从左往右走的情况更新
39             f[i][l]=min(f[i][l],f[i][l-1]+a[i][l]);
40                 f[i][1]=min(f[i][1],f[i][i]+a[i][1]);
41     }
42     cout<<f[n][1]<<endl;
43 }

上面这一段代码来自vijos讨论版块:https://vijos.org/p/1006/solution

下面是另一个动规代码,可以与上面这一段互相对照理解。代码来源:http://blog.csdn.net/Little_Flower_0/article/details/47945611

下面这段代码中,d[i][j]表示从(i,j)这个位置到达底层的最短距离。

 1 #include<stdio.h>
 2 #define maxint 2000000000
 3 #define min(a,b) (a<b?a:b)
 4 long a[1000][1000]={0};
 5 long d[1000][1000]={0};
 6 int main()
 7 {
 8     long n,i,j;
 9     scanf("%ld",&n);
10     for(i=0;i<n;i++)
11       for(j=0;j<=i;j++)
12         scanf("%ld",&a[i][j]);
13 
14     for(i=0;i<n;i++)
15       for(j=0;j<=i;j++)
16         d[i][j]=maxint;
17 
18     for(i=0;i<n;i++)                                            //对最后一行的处理 
19       d[n-1][i]=a[n-1][i];
20     for(i=1;i<n;i++)
21       d[n-1][i]=d[n-1][i-1]+a[n-1][i];                          //因为最后一行右边的点只能从左边的推来,所以有了这个预处理 
22     for(i=n-1;i>=0;i--)                              
23       d[n-1][i]=min(d[n-1][i],d[n-1][(i+1)%n]+a[n-1][i]);       //往左走的话,肯定要先从左边翻过去再向左走 
24 
25     for(i=n-2;i>=0;i--)
26     {
27        d[i][0]=min(d[i+1][0],d[i+1][1]);                        //对左边界的处理 
28        d[i][0]=min(d[i][0],d[i+1][i+1]);
29        d[i][0]+=a[i][0];
30 
31        d[i][i]=min(d[i+1][0],d[i+1][i]);                        //对右边界的处理 
32        d[i][i]=min(d[i][i],d[i+1][i+1]);
33        d[i][i]+=a[i][i];
34 
35        for(j=1;j<=i-1;j++)                                      //对中间位置的处理,这时候下面的一行已经处理完了 
36          d[i][j]=min(d[i+1][j],d[i+1][j+1])+a[i][j];
37 
38        d[i][0]=min(d[i][0],d[i][i]+a[i][0]);                    //左推与右推 
39        for(j=1;j<=i;j++)
40          d[i][j]=min(d[i][j],d[i][j-1]+a[i][j]);
41        for(j=i;j>=0;j--)
42          d[i][j]=min(d[i][j],d[i][(j+1)%(i+1)]+a[i][j]);
43 
44     }
45     printf("%ld\n",d[0][0]);
46     return 0;
47 }

转载于:https://www.cnblogs.com/huashanqingzhu/p/7345648.html

相关文章:

电磁学讲义6:高斯定理计算电场

高斯定理是电场力平方反比定律和线性叠加原理的直接结果。也可以由高斯定理作为基本规律导出库仑定律。这说明高斯定理和库仑定律是不同形式的表示电荷和电场关系的同一规律。库仑定律可以使我们从电荷分布求出电场分布&#xff0c;高斯定理可以使我们从电场分布求出电荷分布。…

ant table表格整行点击事件并获取当前行的数据

实现效果:点击表格中某一行,或者点击表格中某一行的一个字段,获取当前行的 item 下标数据,并用 Link 标签传参,下一个页面接收的实现。 如果使用 router 跳转路由传参,需要导入 import router from umi/router; 如果用 Link 跳转路由传参,需要导入 import Link from u…

以太坊公链私链_如何使用以太坊构建汽车制造供应链系统

以太坊公链私链by Marcelo Russi Mergulho由Marcelo RussiMergulho 如何使用以太坊构建汽车制造供应链系统 (How to build a car manufacturing supply chain system using Ethereum) Here at Daitan we are always looking for new technologies that can help our clients s…

微信一次性订阅消息

微信一次性订阅消息官方文档&#xff1a;消息管理>发送一次性订阅消息 开发者可以通过一次性订阅消息授权让微信用户授权第三方移动应用&#xff08;接入说明&#xff09;或公众号&#xff0c;获得发送一次订阅消息给到授权微信用户的机会。授权微信用户可以不需要关注公众号…

react控制组件的显示或隐藏, 根据state判断元素显示隐藏 , setState不实时生效解决方法

代码实现功能&#xff1a;根据 state 中的值判断子组件显示或隐藏&#xff0c;因为 setState 不是及时生效的&#xff0c;所以不做显示隐藏判断会报错。 render() {// 客户经理循环组件function CommentSpan(props){const numbers props.managers;if(!numbers) return;const l…

关于R语言plyr包的安装问题

平时安装R包都是从Rstudio中进行的&#xff0c;今天在装plyr包的时候&#xff0c;Rstudio一直报错&#xff0c;示例如下&#xff1a; 是不是很无语啊&#xff0c;搞了半天不知所以然&#xff0c;然后突发奇想从Rgui中安装试下&#xff0c;没想到轻轻松松就成功了&#xff0c;示…

regexp 好汉字符串_如何在JavaScript中使用RegExp确认字符串的结尾

regexp 好汉字符串by Catherine Vassant (aka Codingk8)由凯瑟琳瓦森(Catherine Vassant)(又名Codingk8) 如何在JavaScript中使用RegExp确认字符串的结尾 (How to use a RegExp to confirm the ending of a String in JavaScript) Using the Regexp ?️ constructor使用Regex…

【转】浅谈分布式锁

前言 随着互联网技术的不断发展&#xff0c;数据量的不断增加&#xff0c;业务逻辑日趋复杂&#xff0c;在这种背景下&#xff0c;传统的集中式系统已经无法满足我们的业务需求&#xff0c;分布式系统被应用在更多的场景&#xff0c;而在分布式系统中访问共享资源就需要一种互斥…

php中的抽象类(abstract class)和接口(interface)

一、 抽象类abstract class 1 &#xff0e;抽象类是指在 class 前加了 abstract 关键字且存在抽象方法&#xff08;在类方法 function 关键字前加了 abstract 关键字&#xff09;的类。 2 &#xff0e;抽象类不能被直接实例化。抽象类中只定义&#xff08;或部分实现&#xff0…

React 父组件给子组件传值,子组件接收

父组件传值代码&#xff1a; render() {return (<div>{this.state.list?(<GeomLine list{this.state.list}/>):null}</div>);} 子组件接收代码&#xff1a; class GeomLine extends Component {// 在组件接收到一个新的 prop (更新后)时被调用。这个方法在…

unity 灯笼_如何创建将自己拼成文字的漂亮灯笼

unity 灯笼In this tutorial, we will go through how to create a group of festival lanterns that arrange themselves into the words you choose. An online demo can be found here.在本教程中&#xff0c;我们将介绍如何创建一组节日灯笼&#xff0c;这些灯笼将自己布置…

Android PackageManager packages.xml文件格式

packages.xml文件存放在/data/system目录下 该文件记录了系统中所有应用程序的包管理相关信息 PmS根据该文件进行包管理的各种操作 标签名称所包含的值举例last-platform-versioninternal"17" external"17"<permission-trees />暂时不使用<…

tplink wr886n v5.0 ttl 接线方法

我的倒是有ttl信息,但是全是乱码,换过RX和TX,也换过串口速率都没用,附上TTL接线图.2016-11-02今天晚上终于搞定了ttl了,步骤如下:1.先将串口波特率改为117500(推荐使用Putty).如果可以了就不用第二步了2.将usb转ttl转接板上的rx和tx的指示灯干掉,可以留下电源指示灯详细教程见s…

React子组件给父组件传值, 父组件引用子组件并给子组件传值

本博客代码是 React 父组件和子组件相互传值的 demo;实现封装一个折线图,折线图选择下拉框,获取下拉框点击的值并且传给父组件根据下拉框筛选的条件更新视图;效果图如下: 父组件代码: 代码解析:父组件 Parent 引用子组件 Sub ,传递了 list 组件给子组件,并且接收子组件…

我如何使用深度学习通过Fast.ai对医学图像进行分类

by James Dietle詹姆斯迪特尔(James Dietle) Convolutional Neural Networks (CNNs) have rapidly advanced the last two years helping with medical image classification. How can we, even as hobbyists, take these recent advances and apply them to new datasets? W…

Java——基础

1.数据类型 int&#xff0c;short&#xff0c;byte&#xff0c;long double&#xff0c;float char&#xff0c;String 2.变量 int var; var 12; int var1 12;final int v1 0; //常量 C/C变量的声明和定义是分开的&#xff0c;JAVA不区分。 //c/c extern int a; //声明 …

Gradle系列教程之依赖管理

这一章我将介绍Gradle对依赖管理的强大支持&#xff0c;学习依赖分组和定位不同类型仓库。依赖管理看起来很容易&#xff0c;但是当出现依赖解析冲突时就会很棘手&#xff0c;复杂的依赖关系可能导致构建中依赖一个库的多个版本。Gradle通过分析依赖树得到依赖报告&#xff0c;…

Ant Design Pro 登录流程以及路由权限设置

登录流程: 1.ant 框架最外层套了 SecurityLayout 布局 SecurityLayout 中判断用户是否登录,做自动跳转路由处理。 里面的 currentUser 和 currentUser.userid 很关键,是判断登录状态的值. 2.currentUser 是通过 src/models/user 中 fetchCurrent 绑定 type saveCurrentUs…

初级开发人员的缺点_这是我想放弃初级开发人员时所做的事情

初级开发人员的缺点Coding is hard. Really hard. There are times when you’ll think “this is amazing! I love this!”编码很难。 真的很难。 有时您会认为“这太神奇了&#xff01; 我喜欢这个&#xff01;” But you’ll also have the not so amazing times. The time…

C#之 HashSet(临时笔记,未参考资料,请慎重)

HashSet是一个集合&#xff0c;类似于DataSet,但是其主要用途是用来存放同一种类型的元素&#xff08;string、row、table等&#xff09;&#xff0c;如果添加的元素跟定义时初始的类型不一致&#xff0c;就会直接编译失败。 例如&#xff1a; HashSet<string> hsnew Has…

Ant Design of React从入门到开发教程

Ant Design Pro 是一个企业级中后台前端/设计解决方案。 目录: 一:开发前的准备 二:创建页面 三:创建组件并引用 四:封装网络请求和网络请求走向 五:登录流程以及路由权限设置 六:父组件和子组件相互传值和接收 七:for 循环渲染组件 Ant Design Pro 全家桶技术…

适合初学者的数据结构_数据结构101:数组-初学者的直观介绍

适合初学者的数据结构了解您每天使用的数据结构。 (Get to know the data structures that you use every day. ) Welcome! Let’s Start with some Vital Context. Let me ask you this: ✅ Do you listen to music on your smartphone?✅ Do you keep a list of contacts on…

少侠,找个千手观音来帮你营销可好?

亚历山大公司营销主管老张最近有点儿烦&#xff0c;不是因为老婆更年期、女儿叛逆期&#xff0c;而是工作遇到了些麻烦。 社交营销很火&#xff0c;老张自认为公司始终游走在新科技最前沿&#xff0c;当然在第一时间就开通了微信、微博、QQ……各种社交网络的一大堆账号&#x…

Upload上传图片

实现antd上传图片,Upload 组件可以上传多张图片,多张图片上传成功的效果图: 每次上传 onChange 回调函数都会执行一次并且里面接收一个JSON对象,其中 file 对象是本次上传的图片信息,status 值为 done 就表示这一次上传成功了,fileList 中是一个数组,里面是组件所有上传…

将html中的代码拷贝到jsp后出现的问题 Failed to create the part's controls

Failed to create the parts controls 解决方法&#xff1a; 在文件上右键:open with转载于:https://www.cnblogs.com/flyoung/p/4885921.html

面试官问你想找什么工作_找工作时如何面试面试官

面试官问你想找什么工作在技​​术面试中要问的十二个问题 (Twelve questions to ask at tech interviews) I’ve just come off six weeks’ of interviewing for medior software developer roles, in a market that is desperate for talent (Amsterdam). That means I went…

windows7 端口查看以及杀死进程释放端口

1、调出命令窗口&#xff1a;开始---->运行---->cmd&#xff0c;或者是windowR组合键 2、输入命令&#xff1a;netstat -ano&#xff0c;列出所有端口的情况。在列表中我们观察被占用的端口&#xff0c;比如是4300&#xff0c;我们拿它来做实验。 3、查看被占用端口对应的…

web-view 跳转小程序页面 网页跳转小程序

H5实现代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>测试H5</title><meta content"widthdevice-width, initial-scale1.0, maximum-scale1.0, user-scalable0" name"viewport…

MongoDB安装指南

0. 环境说明&#xff1a;Ubuntu 14.04, MongoDB2.6.1 1.输入MongoDB中public Key值到Ubuntu包系统中 2. 在Sources列表中创建MongoDB的文件 3. 又一次载入本地的文件包库列表 4. 安装MongoDB数据库 5. 启动MongoDB 6. 启动MongoDB shell,shell提供了一个类似SQLConsole的方式…

待办事项优先级 开发_如何通过创建主题待办事项确定学习内容的优先级

待办事项优先级 开发by Dan Draper通过丹德雷珀(Dan Draper) 如何通过创建主题待办事项确定学习内容的优先级 (How to prioritize what you learn by creating a topic backlog) 25年编码经验 (Lessons from 25 years of coding) Way back in 1994, I started learning how to…