发布网友 发布时间:2022-04-30 02:43
共3个回答
热心网友 时间:2023-10-08 21:56
是用搜索(说白了,就是枚举,取最优(剪枝))算法实现的,只不过是有记忆的搜索热心网友 时间:2023-10-08 21:56
动态规划是用来解决分阶段决策问题的一中方法,要具体问题具体分析,不存在具体的算法。有几类比较典型的动态规划问题(比如背包问题),你可以去网上搜下学习一下热心网友 时间:2023-10-08 21:56
#include<stdio.h> int job[6][2]={ {3,8}, {12,10}, {5,9}, {2,6}, {9.3}, {11,1} }; int x[6],bestx[6],f1=0,bestf,f2[7]={0}; void try(int i); void swap(int a,int b); int main(void) { int i,j; bestf=32767; for(i=0;i<6;i++) x[i]=i; try(0); for(i=0;i<6;i++) printf("%d ",bestx[i]); printf("\nbestf=%d\n",bestf); return 0; } void try(int i) { int j; if(i==6) { for(j=0;j<6;j++) bestx[j]=x[j]; bestf=f2[i]; } else { for(j=i;j<6;j++) { f1=f1+job[x[j]][0]; if(f2[i]>f1) f2[i+1]=f2[i]+job[x[j]][1]; else f2[i+1]=f1+job[x[j]][1]; if(f2[i+1]<bestf) { swap(i,j); try(i+1); swap(i,j); } f1=f1-job[x[j]][0]; } } } void swap(int i,int j) { int temp; temp=x[i]; x[i]=x[j]; x[j]=temp; }~