📄 plan.cpp
字号:
#include <stdio.h>
#define pc(j) 20+5*j
#define e(j) j
void dp_plan(){
int i,j,k,sum,limit,n,io,max_stock,max_production,d[10],x[10][100],z,z_maxlimit,z_minlimit,xstar[10];
float f[10][100],temp;
printf("WELCOME TO THE DYNIMIC SYSTEM! periods of the inventory =? ");
scanf("%d",&n);
printf(" the maximum stocks of each period=? ");
scanf("%d",&max_stock);
printf(" the maximum production of each period=? ");
scanf("%d",&max_production);
printf(" The stocks of the first period=? ");
scanf("%d",&io);
for(i=0;i<n;i++)
{printf("Demand for period %d is ",i+1);
scanf("%d",&d[i]);
}
for(k=0;k<d[n-1];k++)
{x[n-1][k]=d[n-1]-k;
f[n-1][k]=pc(x[n-1][k]);
}
f[n-1][d[n-1]]=0;
x[n-1][d[n-1]]=0;
for(i=n-2;i>=0;i--)
{sum=0;
for(j=i;j<n;j++)
sum+=d[j];
if(sum<max_stock)
limit=sum;
else
limit=max_stock;
for(k=0;k<=limit;k++)
{if(d[i]-k>0)
{z_minlimit=d[i]-k;
f[i][k]=pc(z_minlimit)+e(0)+f[i+1][0];
x[i][k]=z_minlimit;
}
else
{z_minlimit=0;
f[i][k]=e(k-d[i])+f[i+1][k-d[i]];
x[i][k]=0;
}
if(sum-k>max_stock+d[i]-k)
if(max_stock+d[i]-k>max_production)
z_maxlimit=max_production;
else
z_maxlimit=max_stock+d[i]-k;
else
if(sum-k>max_production)
z_maxlimit=max_production;
else
z_maxlimit=sum-k;
for(z=z_minlimit;z<=z_maxlimit;z++)
{temp=pc(z)+e(k+z-d[i])+f[i+1][k+z-d[i]];
if(f[i][k]>temp)
{f[i][k]=temp;
x[i][k]=z;
}
}
}
}
/* for(i=0;i<n;i++)
{printf(" the period %d ",i+1);
for(j=0;j<=5;j++)
printf(" %f--->%d ",f[i][j],x[i][j]);
getch();
}*/
printf(" The minimum policy cost for the %d periods is %f",n,f[0][io]);
xstar[0]=x[0][io];
j=io;
printf(" The optimal amount to produce in period 1 is %d",xstar[0]);
for(i=1;i<n;i++)
{xstar[i]=x[i][xstar[i-1]-d[i-1]+j];
printf(" The optimal amount to produce in period %d is %d",i+1,xstar[i]);
j=xstar[i-1]-d[i-1]+j;
}
}
void main(){
clrscr();
dp_plan();
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -