📄 unit1.cpp
字号:
//---------------------------------------------------------------------------
#include <time.h>
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int count=0;
int m; int n;
int **B; //储存分配情况
int ***V; //分配价值表
int ***C; //随机生成价值表
//---------------------------------------------------------------------------
void fenpei(int mm,int nn)
{ int **tem;
tem=new int*[n+1];
for(int p1=0;p1<=n;p1++)
tem[p1]=new int[m+1];
for(int i=0;i<=n;i++)
for(int j=0;j<=m;j++)
tem[i][j]=0;
for(int i=0;i<=mm;i++)
V[count][0][i]=0;
for(int i=1;i<=nn;i++)
{ int max_temp=0;
for(int j=1;j<=mm;j++)
{ int temp=0;
for(int s=0;s<=i;s++)
{
temp=V[count][s][j-1]+C[count][i-s][j];
if(temp>max_temp)
{
max_temp=temp;
tem[i][j]=i-s;
}
}
V[count][i][j]=max_temp;
}
}
int add=0; int tt=n;
for(int flag=m;flag>=1;flag--)
{
B[count][flag]=tem[tt][flag];
for(int pp=flag;pp<=flag;pp++)
add=add+B[count][pp];
tt=n-add;
}
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
count=0;
for(int pp=1;pp<=m;pp++)
{
StringGrid1->Cells[pp][0]="车间"+AnsiString(pp) ;
StringGrid2->Cells[pp][0]="车间"+AnsiString(pp) ;
}
for(int ppp=1;ppp<=n;ppp++)
{
StringGrid1->Cells[0][ppp]=AnsiString(ppp)+"台";
StringGrid2->Cells[0][ppp]=AnsiString(ppp)+"台";
}
StringGrid3->Cells[0][1]="台数";
for(int i=1;i<=m;i++)
{
StringGrid3->Cells[i][0]="车间"+AnsiString(i) ;
StringGrid3->Cells[i][1]=" ";
}
for(int t=1;t<=n;t++)
{
for(int r=1;r<=m;r++)
{
StringGrid1->Cells[r][t]=" ";
}
}
for(int t=1;t<=n;t++)
{
for(int r=1;r<=m;r++)
{
StringGrid2->Cells[r][t]=" ";
}
}
Edit1->Text=" ";
clock_t time_p; clock_t tim2; clock_t tim1;
AnsiString velue1;
velue1=InputBox("输入设备台数 ","输入设备台数 ","0");
n=StrToInt(velue1);
AnsiString velue2;
velue2=InputBox("输入车间数 ","输入车间数 ","0");
m=StrToInt(velue2);
B=new int*[10];
for(int r=0;r<10;r++)
{
B[r]=new int[m+1];
for(int s=0;s<m;s++)
{
B[r][s]=0;
}
}
V=new int**[10];
for(int i=0;i<10;i++)
{
V[i]=new int*[n+1];
for(int j=0;j<=n;j++)
{ V[i][j]=new int[m+1];}
}
for(int w=0;w<10;w++)
{
for(int x=0;x<=n;x++)
for(int y=0;y<=m;y++)
V[w][x][y]=0;
}
C=new int**[10];
for(int ii=0;ii<10;ii++)
{
C[ii]=new int*[n+1];
for(int jj=0;jj<=n;jj++)
{ C[ii][jj]=new int[m+1];}
}
for(int ww=0;ww<10;ww++)
{ for(int xx=0;xx<=n;xx++)
for(int yy=0;yy<=m;yy++)
C[ww][xx][yy]=0;
}
for(int p=1;p<=n;p++)
for(int q=1;q<=m;q++)
{
AnsiString velue;
velue=InputBox("输入利润矩阵 ",AnsiString(p)+"行"+AnsiString(q)+"列"+": ","0");
C[count][p][q]=StrToInt(velue);
}
tim1=clock();
fenpei(m,n);
tim2=clock();
time_p=tim2-tim1;
Label7->Caption=AnsiString(time_p)+" 毫秒 ";
for(int pp=1;pp<=m;pp++)
{
StringGrid1->Cells[pp][0]="车间"+AnsiString(pp) ;
StringGrid2->Cells[pp][0]="车间"+AnsiString(pp) ;
}
for(int ppp=1;ppp<=n;ppp++)
{
StringGrid1->Cells[0][ppp]=AnsiString(ppp)+"台";
StringGrid2->Cells[0][ppp]=AnsiString(ppp)+"台";
}
StringGrid3->Cells[0][1]="台数";
Label2->Caption="第 "+AnsiString(count+1)+" 组";
Label3->Caption="第 "+AnsiString(count+1)+" 组";
for(int i=1;i<=m;i++)
{
StringGrid3->Cells[i][0]="车间"+AnsiString(i);
StringGrid3->Cells[i][1]=AnsiString(B[count][i]);
}
for(int t=1;t<=n;t++)
{
for(int r=1;r<=m;r++)
{
StringGrid1->Cells[r][t]=AnsiString(C[count][t][r]);
}
}
for(int t=1;t<=n;t++)
{
for(int r=1;r<=m;r++)
{
StringGrid2->Cells[r][t]=AnsiString(V[count][t][r]);
}
}
Edit1->Text=AnsiString(V[count][n][m]);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{ Button3->Visible=true;
n=30;m=10;
clock_t time_p; clock_t tim2; clock_t tim1;
B=new int*[10];
for(int r=0;r<10;r++)
{
B[r]=new int[m+1];
for(int s=0;s<m;s++)
{
B[r][s]=0;
}
}
V=new int**[10];
for(int i=0;i<10;i++)
{
V[i]=new int*[n+1];
for(int j=0;j<=n;j++)
{ V[i][j]=new int[m+1];}
}
for(int w=0;w<10;w++)
{
for(int x=0;x<=n;x++)
for(int y=0;y<=m;y++)
V[w][x][y]=0;
}
C=new int**[10];
for(int ii=0;ii<10;ii++)
{
C[ii]=new int*[n+1];
for(int jj=0;jj<=n;jj++)
{ C[ii][jj]=new int[m+1];}
}
for(int ww=0;ww<10;ww++)
{ for(int xx=0;xx<=n;xx++)
for(int yy=0;yy<=m;yy++)
C[ww][xx][yy]=0;
}
tim1=clock();
for(int counts=0;counts<10;counts++)
{ count=counts;
for(int p=1;p<=n;p++)
for(int q=1;q<=m;q++)
{
C[count][p][q]=random(1000);
}
fenpei(m,n);
}
tim2=clock();
time_p=tim2-tim1;
Label7->Caption=AnsiString(time_p)+" ms ";
count=0;
for(int pp=1;pp<=m;pp++)
{
StringGrid1->Cells[pp][0]="车间"+AnsiString(pp) ;
StringGrid2->Cells[pp][0]="车间"+AnsiString(pp) ;
}
for(int ppp=1;ppp<=n;ppp++)
{
StringGrid1->Cells[0][ppp]=AnsiString(ppp)+"台";
StringGrid2->Cells[0][ppp]=AnsiString(ppp)+"台";
}
StringGrid3->Cells[0][1]="台数";
Label2->Visible=true;
Label3->Visible=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{ ShowMessage("请选择要查看的实例(1--10)");
AnsiString velue2;
velue2=InputBox("输入 ","输入实例的序数 ","1");
count=StrToInt(velue2)-1;
if(count==-1)
ShowMessage("实例的序数 从1开始");
else
{
for(int pp=1;pp<=m;pp++)
{
StringGrid1->Cells[pp][0]="车间"+AnsiString(pp) ;
StringGrid2->Cells[pp][0]="车间"+AnsiString(pp) ;
}
for(int ppp=1;ppp<=n;ppp++)
{
StringGrid1->Cells[0][ppp]=AnsiString(ppp)+"台";
StringGrid2->Cells[0][ppp]=AnsiString(ppp)+"台";
}
StringGrid3->Cells[0][1]="台数";
Label2->Caption="第 "+AnsiString(count+1)+" 组";
Label3->Caption="第 "+AnsiString(count+1)+" 组";
for(int i=1;i<=m;i++)
{
StringGrid3->Cells[i][0]="车间"+AnsiString(i) ;
StringGrid3->Cells[i][1]=AnsiString(B[count][i]);
}
for(int t=1;t<=n;t++)
{
for(int r=1;r<=m;r++)
{
StringGrid1->Cells[r][t]=AnsiString(C[count][t][r]);
}
}
for(int t=1;t<=n;t++)
{
for(int r=1;r<=m;r++)
{
StringGrid2->Cells[r][t]=AnsiString(V[count][t][r]);
}
}
Edit1->Text=AnsiString(V[count][n][m]);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N4Click(TObject *Sender)
{
count=0;
clock_t time_p; clock_t tim2; clock_t tim1;
AnsiString velue1;
velue1=InputBox("输入设备台数 ","输入设备台数 ","0");
n=StrToInt(velue1);
AnsiString velue2;
velue2=InputBox("输入车间数 ","输入车间数 ","0");
m=StrToInt(velue2);
B=new int*[10];
for(int r=0;r<10;r++)
{
B[r]=new int[m+1];
for(int s=0;s<m;s++)
{
B[r][s]=0;
}
}
V=new int**[10];
for(int i=0;i<10;i++)
{
V[i]=new int*[n+1];
for(int j=0;j<=n;j++)
{ V[i][j]=new int[m+1];}
}
for(int w=0;w<10;w++)
{
for(int x=0;x<=n;x++)
for(int y=0;y<=m;y++)
V[w][x][y]=0;
}
C=new int**[10];
for(int ii=0;ii<10;ii++)
{
C[ii]=new int*[n+1];
for(int jj=0;jj<=n;jj++)
{ C[ii][jj]=new int[m+1];}
}
for(int ww=0;ww<10;ww++)
{ for(int xx=0;xx<=n;xx++)
for(int yy=0;yy<=m;yy++)
C[ww][xx][yy]=0;
}
for(int p=1;p<=n;p++)
for(int q=1;q<=m;q++)
{
AnsiString velue;
velue=InputBox("输入利润矩阵 ",AnsiString(p)+"行"+AnsiString(q)+"列"+": ","0");
C[count][p][q]=StrToInt(velue);
}
tim1=clock();
fenpei(m,n);
tim2=clock();
time_p=tim2-tim1;
Label7->Caption=AnsiString(time_p)+"毫秒";
//固定输出
for(int pp=1;pp<=m;pp++)
{
StringGrid1->Cells[pp][0]="车间"+AnsiString(pp) ;
StringGrid2->Cells[pp][0]="车间"+AnsiString(pp) ;
}
for(int ppp=1;ppp<=n;ppp++)
{
StringGrid1->Cells[0][ppp]=AnsiString(ppp)+"台";
StringGrid2->Cells[0][ppp]=AnsiString(ppp)+"台";
}
StringGrid3->Cells[0][1]="台数";
Label2->Caption="第 "+AnsiString(count+1)+" 组";
Label3->Caption="第 "+AnsiString(count+1)+" 组";
for(int i=1;i<=m;i++)
{
StringGrid3->Cells[i][0]="车间"+AnsiString(i) ;
StringGrid3->Cells[i][1]=AnsiString(B[count][i]);
}
for(int t=1;t<=n;t++)
{
for(int r=1;r<=m;r++)
{
StringGrid1->Cells[r][t]=AnsiString(C[count][t][r]);
}
}
for(int t=1;t<=n;t++)
{
for(int r=1;r<=m;r++)
{
StringGrid2->Cells[r][t]=AnsiString(V[count][t][r]);
}
}
Edit1->Text=AnsiString(V[count][n][m]);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N5Click(TObject *Sender)
{
n=30;m=10;
clock_t time_p; clock_t tim2; clock_t tim1;
B=new int*[10];
for(int r=0;r<10;r++)
{
B[r]=new int[m+1];
for(int s=0;s<m;s++)
{
B[r][s]=0;
}
}
V=new int**[10];
for(int i=0;i<10;i++)
{
V[i]=new int*[n+1];
for(int j=0;j<=n;j++)
{ V[i][j]=new int[m+1];}
}
for(int w=0;w<10;w++)
{
for(int x=0;x<=n;x++)
for(int y=0;y<=m;y++)
V[w][x][y]=0;
}
C=new int**[10];
for(int ii=0;ii<10;ii++)
{
C[ii]=new int*[n+1];
for(int jj=0;jj<=n;jj++)
{ C[ii][jj]=new int[m+1];}
}
for(int ww=0;ww<10;ww++)
{ for(int xx=0;xx<=n;xx++)
for(int yy=0;yy<=m;yy++)
C[ww][xx][yy]=0;
}
tim1=clock();
for(int counts=0;counts<10;counts++)
{ count=counts;
for(int p=1;p<=n;p++)
for(int q=1;q<=m;q++)
{
C[count][p][q]=random(1000);
}
fenpei(m,n);
}
tim2=clock();
time_p=tim2-tim1;
Label7->Caption=AnsiString(time_p)+" 毫秒";
count=0;
for(int pp=1;pp<=m;pp++)
{
StringGrid1->Cells[pp][0]="车间"+AnsiString(pp) ;
StringGrid2->Cells[pp][0]="车间"+AnsiString(pp) ;
}
for(int ppp=1;ppp<=n;ppp++)
{
StringGrid1->Cells[0][ppp]=AnsiString(ppp)+"台";
StringGrid2->Cells[0][ppp]=AnsiString(ppp)+"台";
}
StringGrid3->Cells[0][1]="台数";
Label2->Caption="第 "+AnsiString(count+1)+" 组";
Label3->Caption="第 "+AnsiString(count+1)+" 组";
for(int i=1;i<=m;i++)
{
StringGrid3->Cells[i][0]="车间"+AnsiString(i) ;
StringGrid3->Cells[i][1]=AnsiString(B[count][i]);
}
for(int t=1;t<=n;t++)
{
for(int r=1;r<=m;r++)
{
StringGrid1->Cells[r][t]=AnsiString(C[count][t][r]);
}
}
for(int t=1;t<=n;t++)
{
for(int r=1;r<=m;r++)
{
StringGrid2->Cells[r][t]=AnsiString(V[count][t][r]);
}
}
Edit1->Text=AnsiString(V[count][n][m]);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{Close();
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -