排列组合在工作中的实际运用

[img]http://jiaoxujin.iteye.com/upload/picture/pic/11849/40a41575-f2b6-3102-97a4-1ed4d0e467d7.jpg[/img]

个人理解:这个问题的本质是,每一行不选和选1,对于乘积的结果是没有影响的,所以乘积结果取决于你选了多少个3和多少个9,同时注意到3和9的关系,选了一个9也就相当于选了两个三,也就是最终乘积的不同结果的个数取决于能够选到多少个3,能选到多少个9,也就是有多少个不同的结果,那就是看个最值
设有x个3和y个9,显然是当x=0,y=6的时候可以取到最大,也就是说最多可以选到6*2=12个3,这12个值每个都能取道,所以,最终结果是original score共有12种值

=====================================================================

楼上的说到点子上去了,,但实际上是 14种值,,你忘记加上 1 和 0 了.
我用程序"暴力"破解的结果是这样的:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
* @author Xujin.Jiao
*
*/
public class Caculate {
private static final int[] pf = {0, 1, 3, 9};
private static final int[] cost = {0, 1, 3, 9};
private static final int[] ofDay = {0, 1, 3, 9};
private static final int[] impact = {0, 1, 3, 9};
private static final int[] sr = {0, 1, 9};
private static final int[] bd = {0, 1, 9};

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int totalSels = 0;
int value = 0;
List<Integer> valueList = new ArrayList<Integer>();

totalSels = pf.length * cost.length * ofDay.length *
impact.length * sr.length * bd.length;

for (int i = 0; i < pf.length; i++) {
for (int j = 0; j < cost.length; j++) {
for (int k = 0; k < ofDay.length; k++) {
for (int l = 0; l < impact.length; l++) {
for (int m = 0; m < sr.length; m++) {
for (int n = 0; n < bd.length; n++) {
value = (0 == pf[i] ? 1 : pf[i]) * (0 == cost[j] ? 1 : cost[j]) * (0 == ofDay[k] ? 1 : ofDay[k]) *
(0 == impact[l] ? 1 : impact[l]) * (0 == sr[m] ? 1 : sr[m]) * (0 == bd[n] ? 1 : bd[n]);
if (0 == pf[i] && 0 == cost[j] && 0 == ofDay[k] &&
0 == impact[l] && 0 == sr[m] && 0 == bd[n]) {
value = 0;
}
if (!valueList.contains(new Integer(value))) {
valueList.add(new Integer(value));
}
}
}
}
}
}
}

System.out.println("There are " + totalSels + " different selections.");
System.out.println("There are " + valueList.size() + " different values.");

System.out.println("These values are listed as follows:");
Collections.sort(valueList);
for (int i = 0; i < valueList.size(); i++) {
System.out.println(valueList.get(i).toString());
}
}

}


There are 2304 different selections.
There are 14 different values.
These values are listed as follows:
0
1
3
9
27
81
243
729
2187
6561
19683
59049
177147
531441
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值