引用第8楼zjc于2007-07-28 12:01发表的 :我觉用贪婪法可解决问题
引用第0楼qidann于2007-07-27 18:45发表的 最大值问题——顶着工科智商的头颅们进 :这是一个《三国志11》里建市场的问题现在有一快地盘共9个格子 位置如图所示在每个个子里可以建一个建筑 现在我只考虑建市场和造币厂市场会在一定时间内提供一定数目的资金 造币厂可以使接壤市场的效果变为原来的1.5倍.......
#include "ccbp.h"//////比较各种排列方式计算结果///sum(int temp[],int relation[],int result[]){ int i,j,sum=0; for(i=1;i<=9;i++){ for(j=1;j<=9;j++){ if(temp是厂&& 没有计算过){ if(temp[j]是场 && relation[j]==1&& 没有计算过 ){ sum+=1.5; }else if(temp[j]是场 && relation[j]==0 && 没有计算过){ sum+=1; } }else if( 没有计算过){ sum+=1; } } } if(sum > result[0]){ //赋值方便输出 result[0]=sum; for(j=1;j<=9;j++){ result[j]=temp[j]; } } if(sum == result[0]) result[10]+=1;}funtion(int i,int temp[],int relation[],int result[]){ ///递归求排列情况 int j; if(i==10) { ///递归10次,生成了排列情况,则可求解 sum(temp,relation,result) /* 求解 */ return; } temp= 0; funtion(i+1,temp,relation,result); temp= 1; funtion(i+1,temp,relation,result);}main(){ int relation[][]={, , , , , , , , , } ///输入是否相邻关系,分9组,每组9个 int temp[10]={0}; /// 存放当前排列的情况 / int result[11]={0}; /// 0的位置记录已得结果的最大值,1-9记录排列情况,10记录同值有多少种 clrscr(); funtion(1,temp,relation,result); ///输出 for(j=0;j<=10;j++){ printf("%d ",result[j]); }}