网易面试 合唱团
来源:互联网 发布:华为硬件单片机笔试题 编辑:程序博客网 时间:2024/05/22 11:50
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int a[55];
long long ans[55][15][2];
int flag[55][15];
int main()
{
int n,k,d;
cin>>n;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
cin>>k>>d;
memset(ans,0,sizeof(ans));
memset(flag,0,sizeof(flag));
for(int i=1;i<=n;i++)
{
ans[i][1][0]=a[i];
ans[i][1][1]=a[i];
flag[i][1]=1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=k;j++)
{
if(flag[i][j]!=1)
continue;
for(int p=i+1;p<=n&&p<=i+d;p++)
{
if(flag[p][j+1]==1)
{ans[p][j+1][0]=max(ans[p][j+1][0],max(ans[i][j][0]*a[p],ans[i][j][1]*a[p]));
ans[p][j+1][1]=min(ans[p][j+1][1],min(ans[i][j][0]*a[p],ans[i][j][1]*a[p]));
}
else
{
ans[p][j+1][0]=max(ans[i][j][0]*a[p],ans[i][j][1]*a[p]);
ans[p][j+1][1]=min(ans[i][j][0]*a[p],ans[i][j][1]*a[p]);
flag[p][j+1]=1;
}
}
}
}
long long sum=ans[k][k][0];
for(int i=k+1;i<=n;i++)
sum=max(sum,ans[i][k][0]);
cout<<sum<<endl;
return 0;
}
/*直接暴力dp,数据范围不是很大,o(n^3)的时间复杂度满足要求,dp[i][j][k]表示的是第i个数作为我们要挑出
的第j个,因为这个题还存在正负数的问题所以需要保存当前的最大正数和最小负数两个值所以还得开个第三维,
然后直接三重循环暴力dp就可以了,数据爆int需要用long long*/
#include <cstdio>
#include <cstring>
using namespace std;
int a[55];
long long ans[55][15][2];
int flag[55][15];
int main()
{
int n,k,d;
cin>>n;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
cin>>k>>d;
memset(ans,0,sizeof(ans));
memset(flag,0,sizeof(flag));
for(int i=1;i<=n;i++)
{
ans[i][1][0]=a[i];
ans[i][1][1]=a[i];
flag[i][1]=1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=k;j++)
{
if(flag[i][j]!=1)
continue;
for(int p=i+1;p<=n&&p<=i+d;p++)
{
if(flag[p][j+1]==1)
{ans[p][j+1][0]=max(ans[p][j+1][0],max(ans[i][j][0]*a[p],ans[i][j][1]*a[p]));
ans[p][j+1][1]=min(ans[p][j+1][1],min(ans[i][j][0]*a[p],ans[i][j][1]*a[p]));
}
else
{
ans[p][j+1][0]=max(ans[i][j][0]*a[p],ans[i][j][1]*a[p]);
ans[p][j+1][1]=min(ans[i][j][0]*a[p],ans[i][j][1]*a[p]);
flag[p][j+1]=1;
}
}
}
}
long long sum=ans[k][k][0];
for(int i=k+1;i<=n;i++)
sum=max(sum,ans[i][k][0]);
cout<<sum<<endl;
return 0;
}
/*直接暴力dp,数据范围不是很大,o(n^3)的时间复杂度满足要求,dp[i][j][k]表示的是第i个数作为我们要挑出
的第j个,因为这个题还存在正负数的问题所以需要保存当前的最大正数和最小负数两个值所以还得开个第三维,
然后直接三重循环暴力dp就可以了,数据爆int需要用long long*/
阅读全文
0 0
- 网易面试 合唱团
- 网易 合唱团
- 网易 合唱团
- 网易笔试题:合唱团
- 网易编程题-合唱团
- 网易笔试题:合唱团
- 合唱团-网易python
- 网易合唱团问题
- 网易---合唱团----动态规划
- 网易笔试题-合唱团
- 2017网易合唱团
- 清晰解题: 网易笔试合唱团
- 网易编程题(合唱团)
- 【网易】:合唱团(动态规划)
- [网易内推编程题] 合唱团
- 合唱团(2016网易编程题)
- 网易编程笔试题(一):合唱团
- 合唱团
- 指针变量与常规变量的指向数据域的区别
- LeetCode-102. Binary Tree Level Order Traversal
- Couldn't import dot_parser, loading of dot files will not be possible.
- MySQL —— 约束
- Mybatis入门一
- 网易面试 合唱团
- 1205: 杨八方的英语问题
- python-快速使用urllib爬取网页(8-URLError)
- 蓝桥杯: 入门训练 A+B问题
- Android------视频播放器(包含全屏播放,快退,快进,腾讯新闻的列表播放等)
- 移动端开发工具比较(JAVA Object-c /Cordova Ionic / Recent Native)
- 1.数据结构与算法绪论
- 图像平均操作为什么能降噪
- scrapy爬知乎返回500