问编程高手一道问题的算法
来源:百度知道 编辑:UC知道 时间:2024/05/22 12:39:35
/*gcc编译通过*/
/*如果有多种选择能达到最优解,则这个程序对路径的选择是任意的*/
#include <stdio.h>
#include <mem.h>
#define MAXL 1000
int mark[MAXL],n;
int work[MAXL][2];
int ts[MAXL];
int main()
{
int i,j,res;
while(1)
{
/*输入的总旗子数量*/
scanf("%d",&n);
/*输入非正数则退出程序*/
if(n<=0) break;
/*依次输入各个旗子的分值*/
for(i=0;i<n;++i) scanf("%d",&mark[i]);
/*初始化*/
memset(ts,0,sizeof(ts));
memset(work,0,sizeof(work));
for(i=0;i<MAXL;++i) work[i][1]=-1;
res=0;
/*数组work[][0]记录的是:
如果一定要经过第i面旗子,则将一定经过第i面旗子所能达到的最优值记录在work[i][0]
work[][1]记录的是:
对于第i面旗子,达到最优值需要经过的前一面旗子的编号,如果该面旗是第1面旗,即前面没有满足条件的旗子,则将它记录为-1*/
/*动态规划核心部分*/
for(i=0;i<n;++i)
{
for(j=0;j<i;j++)