ITAT 某届决赛的一道题

来源:互联网 发布:恢复软件finaldata 编辑:程序博客网 时间:2024/05/22 03:43
 
import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.TreeMap;/* * 1、 某企业在未来的12个月要研究一种新产品,新产品的研制需要四个阶段, * 每个阶段都可用慢、正常、快等三种速度进行,时间和成本如下表所列。 *      理论研究         试验阶段      政府批准        销售 *   慢      5/5        3/6       6/1      5/8  *  正常   4/7        2/8       4/1      4/10  *   快     2/10       1/12      2/3      3/15 *    *   说明:单位(月/万元),时间按月,成本按万元为单位。 *   例如:5/5代表5个月,5万元;4/7代表4个月,7万元。 *        该企业准备在12个月内花费最少的费用就可以有新产品。 *     问:  

* (1)请给出最佳方法或算法。

* (2)编程实现最佳算法。

* (3)达到同一目标的次佳方法或算法是什么?

*/public class ITATtest2{public static void main(String[] args){/* 储存表中数据 * 建立三个二维数组 分别储存慢 , 正常 , 快 的时间和费用 */int[][] slow = {{5, 5}, {3, 6}, {6, 1}, {5, 8}}; int[][] nomal = {{4, 7}, {2, 8}, {4, 1},{4, 10}};int[][] fast = {{2, 10}, {1, 12}, {2, 3}, {3, 15}};// 储存数组 用于循环
           List<int[][]> list = new ArrayList<int[][]>();list.add(slow);list.add(nomal);list.add(fast);Map<String, Integer> result = new TreeMap<String, Integer>();//循环四次  实现全部排列 for(int i = 0; i < 3; i++){for(int j = 0; j < 3; j++){for(int n = 0; n < 3; n++){for(int m = 0; m < 3; m++){   int[][] first = list.get(i);   int[][] second = list.get(j);   int[][] third = list.get(n);   int[][] fourth = list.get(m);      //总共时间   int monthCount = first[0][0] + second[1][0] +        third[2][0] + fourth[3][0];      if(monthCount > 12)   {   continue;   }   else   {   // 总共费用   int cost = first[0][1] + second[1][1] +        third[2][1] + fourth[3][1];      // 慢、中、快安排   String method = String.valueOf(i) + String.valueOf(j) +   String.valueOf(n)  + String.valueOf(m) ;       result.put(method, cost);   } }}}}System.out.println(result);// 实现后续。。 输出结果   (后面的没实现)}}

上面是我实现的代码 , 我的思路是这样的:

                  首先先把时间很费用用二维数组储存   。然后把数组加入一个List 集合中 用于后面的循环, 用for 循环把所有可能的组合都罗列出来! 通过判断时间是否超过12个月来首次筛选! 结果放入一个map中! (说明: map中的key  就是选用方法, 其中第一位  0  1   2  代表理论研究阶段选的是慢 正常 快 中的一种  ,  第二位 0  1    2  代表实验阶段选的是 慢 正常  快 中的一种。。以此类推。。)

                    最后输出map 。后来的排序我就没去实现了 !     

 

  但是我觉得我这个方法欠缺什么,   数据量大的时候不好用 而且扩展性差 ! 

不知道有没人有更好的思路,望能拿来分享一下!

   

 

 


 

原创粉丝点击