我猜测lz的意思是不是这样的:
//前提条件
int alength_min = 5;//a数组的长度最小值
int alength_max = 10;//a数组的长度最大值
int blength_min = 5;//b数组的长度最小值
int blength_max = 10;//b数组的长度最大值
int avalue_min = 1;//a数组的值最小值
int avalue_max = 9;//a数组的值最大值
int bvalue_min = 1;//b数组的值最小值
int bvalue_max = 9;//b数组的值最大值 //初始化
int alength,blength;
System.Random r1 = new Random();
alength = r1.Next(alength_min, alength_max);
blength = r1.Next(blength_min, blength_max);
int[] A = new int[alength];
int[] B = new int[blength];
for(int i=0;i<alength;i++)
A[i] = r1.Next(avalue_min, avalue_max);
for(int i=0;i<blength;i++)
B[i] = r1.Next(bvalue_min, bvalue_max);
//前提条件
int alength_min = 5;//a数组的长度最小值
int alength_max = 10;//a数组的长度最大值
int blength_min = 5;//b数组的长度最小值
int blength_max = 10;//b数组的长度最大值
int avalue_min = 1;//a数组的值最小值
int avalue_max = 9;//a数组的值最大值
int bvalue_min = 1;//b数组的值最小值
int bvalue_max = 9;//b数组的值最大值 //初始化
int alength,blength;
System.Random r1 = new Random();
alength = r1.Next(alength_min, alength_max);
blength = r1.Next(blength_min, blength_max);
int[] A = new int[alength];
int[] B = new int[blength];
for(int i=0;i<alength;i++)
A[i] = r1.Next(avalue_min, avalue_max);
for(int i=0;i<blength;i++)
B[i] = r1.Next(bvalue_min, bvalue_max);
解决方案 »
- wince开发使用serialPort
- UserControl里的TabControl控件的问题
- 请教,如何在将datatimepicker中显示的日期在textbox中显示,谢谢
- 请问.net有这样的菜单控件吗?不是那种很平的
- 求猎头行业的管理系统软件
- 窗体程序,让用户自己配置sql连接词,用什么实现最好
- 自己写了一个类,要求在使用的时候必须设置某个属性,除了在类中的函数中进行判断以外,还可以怎么实现,接口吗?c#应该有这样的东东吧
- GridControl 行颜色
- TreeNode的问题,请大力支持.
- 下面这一小段简单的代码为何被告知“字符串太多”?请知者赐教。
- .dll被删除
- 有没有人用THINKPAD E40来开发.NET程序的?
a[]={2,2,4,5,7,9}
b[]={3,4,2,4}
现在要在a[]和b[]中总共取出4个元素,使得他们的合尽可能的大,但是有些条件:
a[]/b[]中取出的元素相加的和不得大于10,如果大于10了,就按照10计算,举个例子:
如a[]中取出9,7两个元素,9+7>10则a里面取出元素和算10,
由于a[]已经取出2个元素,b[]中还能取2个,取两个最大的4,4,则b中取出的元素和为4+4=8,所有元素和计为10+8=18;
但是这个不是最优的取法,正确的取法应该是a[]中取一个9,b[]中取4,4,3或2,这样a的和为9,b的和为10,总合就是9+10=19;不知道这次表达清楚没...有些饶人..
b[]={3,4,2,4}=> A[] 2,2,4,5,7 And 9 (累加SumA = 9)
=> B[] 2,3 And 4,4 (累加SumB = 8)取界限之后的部分合并为1个数组C
C[] 9 And 4,4排序后为9,4,4
如果需要选取的个数n<=3,则返回从C中选最大的n个数的和,如果个数n>=5 则返回20,如果n=4,则返回10 + max(SumA,SumB)
using System;
using System.Collections.Generic;namespace CSharpTest
{ class Program
{
public static void Main()
{
int max = 10, selectCount = 5, result; int[] a = new int[] { 2, 2, 4, 5, 7, 9 };
int[] b = new int[] { 3, 4, 2, 4 }; List<int> tList = new List<int>();
int sumA = Solve(a, max, tList);
int sumB = Solve(b, max, tList); tList.Sort();
int[] c = tList.ToArray(); for (int i = c.Length - 2; i >= 0; i--)
c[i] += c[i + 1]; if (selectCount <= c.Length)
result = c[selectCount - 1];
else if (selectCount == c.Length + 1)
result = max + Math.Max(sumA, sumB);
else
result = max * 2; Console.WriteLine("最大值为:{0}", result);
Console.ReadKey();
} public static int Solve(int[] nums, int max, List<int> target)
{
int sum = 0;
Array.Sort(nums); for (int i = nums.Length - 1; i >= 0; i--)
{
if (sum + nums[i] > max || nums[i] < 0)
break;
else
target.Add(nums[i]); sum += nums[i];
} return sum;
}
}
}
A[]={2,2,4,5,7,9}
B[]={3,4,2,4}
max[A]=10
max[B]=10找到最大价值9并取出,并重置组价值
max[A]=10-9=1
max[B]=10
A[]={2,2,4,5,7}={1,1,1,1,1}
B[]={3,4,2,4}找到最大价值4并取出,并重置组价值
max[A]=1
max[B]=10-4=6
A[]={2,2,4,5,7}={1,1,1,1,1}
B[]={3,4,2}找到最大价值4并取出,并重置组价值
max[A]=1
max[B]=6-4=2
A[]={2,2,4,5,7}={1,1,1,1,1}
B[]={3,2}={2,2}找到最大价值2(数3或2都可以)并取出,并重置组价值
max[A]=1
max[B]=2-2=0
A[]={2,2,4,5,7}={1,1,1,1,1}
B[]={3|2}={0}