?? twomachinesfastworkview.cpp
字號(hào):
// TwoMachinesFastWorkView.cpp : implementation of the CTwoMachinesFastWorkView class
//
#include "stdafx.h"
#include "TwoMachinesFastWork.h"
#include "TwoMachinesFastWorkDoc.h"
#include "TwoMachinesFastWorkView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTwoMachinesFastWorkView
IMPLEMENT_DYNCREATE(CTwoMachinesFastWorkView, CFormView)
BEGIN_MESSAGE_MAP(CTwoMachinesFastWorkView, CFormView)
//{{AFX_MSG_MAP(CTwoMachinesFastWorkView)
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTwoMachinesFastWorkView construction/destruction
CTwoMachinesFastWorkView::CTwoMachinesFastWorkView()
: CFormView(CTwoMachinesFastWorkView::IDD)
{
//{{AFX_DATA_INIT(CTwoMachinesFastWorkView)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// TODO: add construction code here
}
CTwoMachinesFastWorkView::~CTwoMachinesFastWorkView()
{
}
void CTwoMachinesFastWorkView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTwoMachinesFastWorkView)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BOOL CTwoMachinesFastWorkView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFormView::PreCreateWindow(cs);
}
void CTwoMachinesFastWorkView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
}
/////////////////////////////////////////////////////////////////////////////
// CTwoMachinesFastWorkView printing
BOOL CTwoMachinesFastWorkView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CTwoMachinesFastWorkView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CTwoMachinesFastWorkView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
void CTwoMachinesFastWorkView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
// TODO: add customized printing code here
}
/////////////////////////////////////////////////////////////////////////////
// CTwoMachinesFastWorkView diagnostics
#ifdef _DEBUG
void CTwoMachinesFastWorkView::AssertValid() const
{
CFormView::AssertValid();
}
void CTwoMachinesFastWorkView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CTwoMachinesFastWorkDoc* CTwoMachinesFastWorkView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTwoMachinesFastWorkDoc)));
return (CTwoMachinesFastWorkDoc*)m_pDocument;
}
#endif //_DEBUG
ThreeDimensionArray::ThreeDimensionArray(int d1,int d2,int d3)
{
m_d1=d1;
m_d2=d2;
m_d3=d3;
m_s=(char *)malloc(d1*d2*d3);
}
ThreeDimensionArray::~ThreeDimensionArray()
{
free(m_s);
m_s=0;
}
char * ThreeDimensionArray::GetAddress(int x,int y,int z)
{
if (x<0 || x>=m_d1) return 0;
if (y<0 || y>=m_d2) return 0;
if (z<0 || z>=m_d3) return 0;
return m_s+x*m_d2*m_d3+y*m_d3+z;
}
/////////////////////////////////////////////////////////////////////////////
// CTwoMachinesFastWorkView message handlers
int CTwoMachinesFastWorkView::GetIntArray(int a[],char * s)
{
int i,j,State;
BYTE c;
j=0;
State=0;
for (i=0;c=s[i];i++)
if (State==0) // 如果等待數(shù)字
{
if (isdigit(c))
{
a[j]=c-'0';
State=1; // 等待分隔符
}
}
else // 如果等待分隔符
{
if (isdigit(c)) // 如果仍然是數(shù)字,就歸為正在收的單元里
{
a[j]=a[j]*10+(c-'0');
}
else // 如果是分隔符
{
j++; // 收到的個(gè)數(shù)加1
State=0; // 狀態(tài)回到 0,即等待數(shù)字
}
}
return (State==0) ? j : j+1; // 返回收到的數(shù)字個(gè)數(shù)
}
int CTwoMachinesFastWorkView::FastWork(int a[],int b[],int c[],int n)
{
int i,j,k,Sa,Sb,x,i0,j0;//int c[n+1];
Sa=Sb=0; // 計(jì)算
for (j=1;j<=n;j++)
{
Sa+=a[j];
Sb+=b[j];
}
ThreeDimensionArray p(Sa+1,Sb+1,n+1);
for (i=0;i<=Sa;i++) // 賦初值
for (j=0;j<=Sb;j++) *(p.GetAddress(i,j,1))=(a[1]<=i) | (b[1]<=j);
for (k=2;k<=n;k++) // 遞推
for (i=0;i<=Sa;i++)
for (j=0;j<=Sb;j++)
{
*(p.GetAddress(i,j,k))=(a[k]<=i) ? *(p.GetAddress(i-a[k],j,k-1)) : 0;
if (b[k]<=j) *(p.GetAddress(i,j,k)) |= *(p.GetAddress(i,j-b[k],k-1));
}
x=Sa+Sb; // 尋找最小值
for (i=0;i<=Sa;i++)
for (j=0;j<=Sb;j++)
if (*(p.GetAddress(i,j,n)))
{
k=max(i,j);
if (k<x)
{
x=k;
i0=i;
j0=j;
}
}
for (k=n;k>=1;k--)
{
if (i0>=a[k] && *(p.GetAddress(i0-a[k],j0,k-1))!=0) // k 由A機(jī)器完成
{
i0-=a[k];
c[k]=0;
}
else // k 由機(jī)器B完成
{
j0-=b[k];
c[k]=1;
}
}
return x;
}
void CTwoMachinesFastWorkView::OnButton1()
{
// TODO: Add your control notification handler code here
char ss[2560];
int a[256];
int b[256];
int c[256];
int x,i,n;
GetDlgItemText(IDC_EDIT1,ss,sizeof(ss));
n=GetIntArray(&a[1],ss);
GetDlgItemText(IDC_EDIT2,ss,sizeof(ss));
if (GetIntArray(&b[1],ss)!=n)
{
AfxMessageBox("Error");
return;
}
x=FastWork(a,b,c,n);
ss[0]=0;
sprintf(ss+strlen(ss),"IN MACHINE A:");
for (i=1;i<=n;i++)
if (c[i]==0)
{
sprintf(ss+strlen(ss),"%d(T=%d)",i,a[i]);
}
strcat(ss,"\r\n");
sprintf(ss+strlen(ss),"IN MACHINE B:");
for (i=1;i<=n;i++)
if (c[i]!=0)
{
sprintf(ss+strlen(ss),"%d(T=%d)",i,b[i]);
}
sprintf(ss+strlen(ss),"\r\nTIME=%d",x);
SetDlgItemText(IDC_EDIT3,ss);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -