閱讀下列說明和C++代碼。將應填入(n)處的字句寫在答題紙的對應欄內(nèi)。
	【說明】
	在軟件系統(tǒng)中,通常不會給用戶提供取消、不確定或者錯誤操作的選擇,允許將系統(tǒng)恢復到原先的狀態(tài)。現(xiàn)使用備忘錄(Memento)模式實現(xiàn)該要求,得到如圖5-1所示的類圖。Memento 包含了要被恢復的狀態(tài)。Originator創(chuàng)建并在Memento中存儲狀態(tài)。Caretaker負責從Memento中恢復狀態(tài)。
	
 
	
	
	圖5-1 類圖
	【C++代碼】
	#include
	#include
	#include
	using namespace std;
	class Memento{
	private:
	string state;
	public:
	Memento(string state){
	       this->state=state;
	}
	string getState(){
	       return state;
	}
	}
	class Originator{
	private:
	string state;
	public:
	void setState(string state){
	       this>sate=state;
	}
	string getState(){
	       return state;
	}
	Memento saveStateToMemento(){
	          return (1)
	}
	void getStateFromMemento(Memento Memento){
	       state (2)
	}
	class CareTaker{
	private:
	vector mementoList;
	pubilc:
	void(3){
	   mementoList.push back(state)
	   (4);return mementoList(index);
	}
	int mian(){
	Originator*originator=new Originator();
	CareTaker*careTaker=new CareTaker();
	originator->setState("State #1");
	originator->setState("State #2");
	careTaker->add(_(5)_);
	originator->setState("State #3");
	careTaker->add((6));
	originator->setState("State #4");
	cout <<"Current State:"<<"+" <<originator->getState( )<<endl;
	originator->getStateFromMemento(careTaker->get(0);
	cout<<"First saved State:"<<originator->getStatee( )<<endl;
	originator->getStateFromMemento(careTaker->get(1);
	cout<<"second save State"<<"+" <<originator>getState( )<<endl;
	return 0;
	}

	

	 某工程計算中經(jīng)常要完成多個矩陣相乘(鏈乘)的計算任務(wù),對矩陣相乘進行以下說明。
(1)兩個矩陣相乘要求第一個矩陣的列數(shù)等于第二個矩陣的行數(shù),計算量主要由進行乘法運算的次數(shù)決定,假設(shè)采用標準的矩陣相乘算法,計算Amxn*Bnxp需要m*n*p次行乘法運算的次數(shù)決定、乘法運算,即時間復雜度為O(m*n*p)。
(2)矩陣相乘滿足結(jié)合律,多個矩陣相乘時不同的計算順序會產(chǎn)生不同的計算量。以矩陣A15×100,A2100*8,A38x50三個矩陣相乘為例,若按(A1*A2)*A3計算,則需要進行5*100*8+5*8*50=6000次乘法運算,若按A1*(A2*A3)計算,則需要進行100*8*50+5*100*50=65000次乘法運算。
	矩陣鏈乘問題可描述為:給定n個矩陣,對較大的n,可能的計算順序數(shù)量非常龐大,用蠻力法確定計算順序是不實際的。經(jīng)過對問題進行分析,發(fā)現(xiàn)矩陣鏈乘問題具有最優(yōu)子結(jié)構(gòu),即若A1*A2**An的一個最優(yōu)計算順序從第k個矩陣處斷開,即分為A1*A2*…*Ak和Ak+1*Ak+2*...*An兩個子問題,則該最優(yōu)解應該包含 A1*A2*…*Ak的一個最優(yōu)計算順序和 Ak+1*Ak+2*...*An  的一個最優(yōu)計算順序。據(jù)此構(gòu)造遞歸式:
	
 
	(2)函數(shù)cmm
	#define N100
	int cost[N[N];
	int trace[N][N]; 
	int cmm(int n,int seq[]){ 
	    int tempCost; 
	    int tempTrace; 
	    int i,j,k,p; 
	    int temp; 
	     for( i=0;i<n;i++){ cost[i][i] = 0;} 
	     for(p=1;p<n;p++){ 
	        for(i=0; i<n-p;i++){
	            (1)  ; 
	            tempCost = -1; 
	            for(k = i;  (2) ;k++){    
	                temp=  (3)  ; 
	                if(tempCost==-1 || tempCost>temp){                
	                    tempCost = temp;
	                    tempTrace=k; 
	                } 
	            } 
	            cost[i][j] = tempCost; 
	            (4)  ;
	        } 
	    } 
	    return cost[0][n-1]; 
	} 
	
