发布于 2014-11-09 08:13:25 | 210 次阅读 | 评论: 0 | 来源: 网友投递
创新工场
创新工场(英文Innovation Works)由李开复博士创办于2009年9月,是一家致力于早期阶段投资,并提供全方位创业培育的投资机构。创新工场是一个全方位的创业平台,旨在培育创新人才和新一代高科技企业。创新工场通过针对早期创业者需求的资金、商业、技术、市场、人力、法律、培训等提供一揽子服务, 帮助早期阶段的创业公司顺利启动和快速成长。同时帮助创业者开创出一批最有市场价值和商业潜力的产品。创新工场的投资方向将立足信息产业最热门领域:移动互联网、消费互联网、电子商务和云计算。
本文是一份2015创新工场面试题-研发类岗位,感兴趣的同学参考下。
1、 自己所做项目相关问题
2、 求二维数组(矩阵)的子矩阵之和的最大值。(附参考答案)
#include
#include
using namespace std;
#define MAXN 1003
int A[MAXN][MAXN];
long long PS[MAXN][MAXN];
inline long long MatrixSum(int s, int t, int i, int j)
{
return PS[i][j]-PS[i][t-1]-PS[s-1][j]+PS[s-1][t-1];
}
int main()
{
int m, n, i, j;
cin >> n >> m;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
cin >> A[i][j];
for (i=0; i<=n; i++)
PS[i][0] = 0;
for (j=0; j<=m; j++)
PS[0][j] = 0;
// 计算矩阵的部分和
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
PS[i][j] = A[i][j]+PS[i-1][j]+PS[i][j-1]-PS[i-1][j-1];
int a, c;
long long All = A[1][1];
for (a=1; a<=n; a++)
for (c=a; c<=n; c++)
{
// 将子矩阵上下边界设为第a行和第c行,在这些子矩阵中取最大值
long long Tail = MatrixSum(a, 1, c, 1);
for (j=2; j<=m; j++)
{
Tail = max(MatrixSum(a, j, c, j),
MatrixSum(a, j, c, j)+Tail);
All = max(Tail, All);
}
}
cout << All;
}
3、马踏棋盘
如下图所示的棋盘,上面只有一个马,马走“日”字,像图中类似那样走,这样可以有8种走法,若给出一个起点和终点,求出马最后能不能到达终点