您的位置:首页 > 其它

ADV-15-最大乘积

2017-11-19 10:18 155 查看
问题描述
  对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢?
输入格式
  第一行一个数表示数据组数

  每组输入数据共2行:

  第1行给出总共的数字的个数n和要取的数的个数m,1<=n
4000
<=m<=15,

  第2行依次给出这n个数,其中每个数字的范围满足:a[i]的绝对值小于等于4。
输出格式
  每组数据输出1行,为最大的乘积。
样例输入
1

5 5

1 2 3 4 2
样例输出
48

//-C--------
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int max;
void fun(int *val,int index,int size,int m,int cnt,int res);
int main()
{
int n,m,x,i;
int val[15];

scanf("%d",&x);
while(x--)
{
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
{
scanf("%d",&val[i]);
}
max = -10000000;
fun(val,0,n,m,0,1);
printf("%d\n",max);
}
return 0;
}

void fun(int *val,int index,int size,int m,int cnt,int res)
{
if(m==cnt)
{
if(res > max)
{
max = res;
}
return ;
}
if(index>=size)
{
return ;
}
fun(val,index+1,size,m,cnt+1,res*val[index]);
fun(val,index+1,size,m,cnt,res);
}

//------------C++-----------
#include "iostream"
#include "stdio.h"
#include "string"
#include "math.h"
#include "ctype.h"
#include "vector"
#include "stdlib.h"
#include "string.h"
#include "time.h"
#include "set"
#include "algorithm"
using namespace std;
int ans=-(1<<29);
int n,m;
int a[1000];
void dfs(int *a,int cur,int sum,int k)
{
if(k>m)
return ;
if(cur==n)
{
if(k==m)
ans=std::max(ans,sum);
return ;
}
dfs(a,cur+1,sum*a[cur],k+1);
dfs(a,cur+1,sum,k);
}
int main()
{
int T;

cin>>T;
while(T--)
{
cin>>n>>m;
for (int i = 0; i <  n; i++)
{
cin>>a[i];
}
ans=-(1<<29);
dfs(a,0,1,0);
cout<<ans<<endl;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: