算法导论 思考题 15-12(签约棒球自由球员)

来源:互联网 发布:淘宝在手机上怎么装修 编辑:程序博客网 时间:2024/04/27 21:09
#include <stdio.h>#include <stdlib.h>#define BUDGET 20#define N 5int VORP[N+1]={0,2,9,1,3,8};int COST[N+1]={0,3,8,1,4,10};void dp(int**DP,int**Trace){for(int i=1;i<N+1;i++){for(int j=COST[i];j<BUDGET+1;j++){int x=DP[i-1][j-COST[i]]+VORP[i];int y=DP[i-1][j];if(x>=y)//雇佣{DP[i][j]=x;Trace[i][j]=j-COST[i];}else//不雇佣{DP[i][j]=y;Trace[i][j]=j;}}}}void printDP(int**DP){for(int i=0;i<N+1;i++){for(int j=0;j<BUDGET+1;j++){printf("%2d ",DP[i][j]);}printf("\n");}}void getTrace(int**Trace){int j=BUDGET;for(int i=N;i>=1;i--){if(Trace[i][j]==j-COST[i])printf("%d ",VORP[i]);j=Trace[i][j];}printf("\n");}void main(){int **DP=(int**)malloc((N+1)*sizeof(int*));int **Trace=(int**)malloc((N+1)*sizeof(int));for(int i=0;i<N+1;i++){DP[i]=(int*)malloc((BUDGET+1)*sizeof(int));Trace[i]=(int*)malloc((BUDGET+1)*sizeof(int));}for(int i=0;i<N+1;i++){for(int j=0;j<BUDGET+1;j++){DP[i][j]=0;Trace[i][j]=0;}}dp(DP,Trace);printDP(DP);printf("\n");printDP(Trace);printf("\n");getTrace(Trace);getchar();}

原创粉丝点击