📄 exe1.cpp
字号:
#include <stdio.h>
int main()
{
int np=5,cs=5,beta; float prob = 0.5;
int mind,maxd,xk;
float w[np+1][np];
int temp[np+1][np];
int d[][2]={{1,2},{2,3},{3,4},{2,3},{1,2}}; int p[]={13,15,20,11,12};
float valw; float tempval,minvaleur=100000; int demande_min,demande_max; int penalite = 22; int revente = 8;float pen;
for(int i=0; i <np ;i++)
{
printf("d[%d][0]= %d d[%d][1]= %d \n",i,d[i][0],i,d[i][1]);
}
/*-initial table w[n][beta]-*/
for(int i=0 ;i<=np;i++)
{
for(int j=0;j<np;j++)
{
w[i][j]=0;
temp[i][j]=0;
}
}
/*-calcul-*/
for(int i=np-1 ; i>=0;i--)
{
if(d[i][0]<=d[i][1])
{
mind=d[i][0];
maxd=d[i][1];
}
else
{
mind=d[i][1];
maxd=d[i][0];
}
printf("max = %d \n",maxd);
/*-calcul beta(stock)-*/
printf("i= %d|\n",i);
if ((i-1) >=0 )
{
if(d[i-1][0]<=d[i-1][1])
{
beta = cs - d[i-1][0];
}
else
{
beta = cs - d[i-1][1];
}
}
else
{
beta = 1;
}
printf("********beta = %d ********\n",beta);
//for(beta=0;beta<np;beta++)
for(int j=0;j<=beta;j++)
{ minvaleur=100000;
//if (i==np-1 && beta == 0)
if (i==np-1)
{
/*-w[5][0]-*/
for(xk=0;xk<=cs-j;xk++)
{
if(maxd>xk+j)
{
temp[i][xk]=p[i] * xk +(int)( 0.5 * ((d[i][0]-xk-j)+(d[i][1]-xk-j))*penalite);
valw=p[i] * xk +(int)( 0.5 * ((d[i][0]-xk-j)+(d[i][1]-xk-j))*penalite);
printf("temp[%d][%d] = %d\n",i,xk,temp[i][xk]);
}
else
{
temp[i][xk]=p[i] * xk - (int)(0.5 * ((xk+j-d[i][0])+(xk+j-d[i][1]))*revente);
valw = p[i] * xk - (int)(0.5 * ((xk+j-d[i][0])+(xk+j-d[i][1]))*revente);
printf("temp[%d][%d] = %d\n",i,xk,temp[i][xk]);
//printf("temp[%d][%d] = %d\n",i,xk,valw);
}
if(minvaleur > valw )
{
minvaleur=valw;
}
}
w[i][j]=minvaleur;
printf("w[%d][%d]= %.2f \n",i,j,w[i][j]) ;
}
else
{
/*-calcul l'autre periode-*/
for(xk=0;xk<=cs-j;xk++)
{
demande_min = j+xk-maxd; if(demande_min<0) { demande_min=0; } demande_max=j+xk-mind; if(demande_max<0) { demande_max=0; } /*-penalite < 0 j est beta-*/ pen = ((maxd+mind)*prob) - (xk+j); if(pen < 0)
{ pen = 0; tempval= (w[i+1][demande_min]+w[i+1][demande_max])*prob; printf("bbbbbbb w[i+1][%d]=%.0f \n",demande_max,w[i+1][demande_max]);
// valw=p[i] * xk +(int)( 0.5 * ((d[i][0]-xk-j)+(d[i][1]-xk-j))*penalite)+(int)tempval; //valw = p[i] * xk + ((mind+maxd)*prob - (j + xk)) * penalite + tempval; valw = p[i] * xk + pen * penalite + tempval; printf("temp[%d][%d] = %.0f\n",i,xk,valw);
}
else
{ tempval= (w[i+1][demande_max])*prob;
//valw = p[i] * xk - (int)(0.5 * ((xk+j-d[i][0])+(xk+j-d[i][1])))+(int)tempval; //valw = p[i] * xk +(int)( 0.5 * ((d[i][0]-xk-j)+(d[i][1]-xk-j))*penalite)+(int)tempval; //valw = p[i] * xk + ((mind+maxd)*prob - (j + xk)) * penalite + tempval; valw = p[i] * xk + pen * penalite + tempval; printf("temp[%d][%d] = %d\n",i,xk,valw);
}
if(minvaleur > valw )
{
minvaleur=valw;
}
} w[i][j]=minvaleur;
}
}
}
printf("valeur=%d\n",(int)((0.5)*8));
for(int beta = 0 ; beta < 5 ; beta ++){
for(int i = np-1 ; i >= 0 ; i--){ printf("%.1f\t|\t",w[i][beta]);}printf("\n");}+
getchar();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -