一道ITAT的题(C语言实现)

Posted on 2012-03-27 21:52  Fredric  阅读(335)  评论(0编辑  收藏  举报

不知道ITAT是什么东西,做了一道它的编程题,简单的递归实现。

题目如下:

//************************************************************

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个月内花费最少的费用就可以有新产品。

//*******************************************************************

实现如下:

View Code
 1 /*
2 * Fredric 2012-3-27
3 * 第四届ITAT竞赛试题
4 */
5 #include <stdio.h>
6 #include <stdlib.h>
7
8 typedef enum E_PROCESS{
9 E_FAST,
10 E_MIDDLE,
11 E_LOW,
12 E_NONE,
13 };
14
15 typedef struct tagCost{
16 int month;
17 int price;
18 }stCost;
19
20 stCost gStatus1[E_NONE] = {{2,10},{4,7}, {5,5}};//理论研究阶段
21 stCost gStatus2[E_NONE] = {{1,12},{2,8}, {3,6}};//实验阶段
22 stCost gStatus3[E_NONE] = {{2,3}, {4,2}, {6,1}};//政府批准
23 stCost gStatus4[E_NONE] = {{3,15},{4,10},{5,8}};//销售
24
25 stCost* gStatus[4] = {gStatus1, gStatus2, gStatus3, gStatus4};
26
27 E_PROCESS eTempRes[4]; //临时解
28 E_PROCESS eFinalRes[4];//最终解
29
30 int limitMonth = 12; //12个月内
31 int leastCost = 10000;//最小费用
32
33 void initTemp(){
34 for (int i = 0; i < 4; i++)
35 {
36 eTempRes[i] = E_NONE;
37 }
38 }
39
40 void search(int status, int month, int price){
41 int curPrice = 0;
42
43 for (int i = E_FAST; i < E_NONE; i++)
44 {
45 if ((gStatus[status] + i)->month + month < limitMonth)
46 {
47 eTempRes[status] = (E_PROCESS)i;
48 curPrice = price + (gStatus[status] + i)->price;
49 if (3 > status)
50 {
51 search(status + 1, month + (gStatus[status] + i)->month, curPrice);
52 }else{
53 if (curPrice < leastCost)
54 {
55 leastCost = curPrice;
56 for (i = 0; i < 4; i++)
57 {
58 eFinalRes[i] = eTempRes[i];
59 }
60 }
61 }
62 }
63 }
64
65 return;
66 }
67
68 void main(void)
69 {
70 search(0, 0, 0);
71
72 int totalvalue = 0;
73 int totalmonth = 0;
74
75 for(int i = 0; i < 4; i++){
76 totalvalue += (gStatus[i] + eFinalRes[i])->price;
77 totalmonth += (gStatus[i] + eFinalRes[i])->month;
78 printf("Status No,%d is %d\r\n", i, eFinalRes[i]);
79 }
80
81 printf("For %d Month, the Least Cost is %d\r\n",totalmonth, totalvalue);
82
83 return;
84 }



Copyright © 2024 Fredric
Powered by .NET 8.0 on Kubernetes