動歸這個演算法還是很明顯的,首先先對輸入的所有運算元和操作符進行儲存,第一步,刪掉一條邊,這個迴圈遍歷,然後接下來的n-1條邊每條邊和其兩個頂點進行刪除根據邊進行運算將值傳遞到代替他們的新頂點上,知道所有的邊被刪除完,剩下的值就是最大值。
#include #include #include using namespace std;
const int maxlen=51;
const int maxnum=999999999;
const int minnum=-999999999;
int operand[maxlen]; //運算元
char operat[maxlen]; //操作符
int resmax[maxlen][maxlen]; //i到j合併的最大值
int resmin[maxlen][maxlen]; //i到j合併的最小值
int ansmax; //臨時最大值
bool dedge[maxlen]; //最大結果時所刪邊
int n,i,j,k,steplen,deledge;
int tempmax,tempmin;
void init() //初始化
else if(resmax[deledge][(deledge-1+n)%n]==ansmax)
dedge[deledge]=1;
}cout<
poj 1179 記憶化搜尋
注意一點 在加法的時候最大值肯定是兩個最大值相加,最小值肯定是兩個最小值相加 在乘法的時候 最大值可能是兩個最大值相乘 也可能是兩個最小值相乘,最小值可能是兩個最小值相乘,也可能是乙個最大值和乙個最小值 然後我用的是記憶化搜尋 dp min i j 表示區間i到j的最小值,dp max i j 表示...
poj 1179 矩陣鏈乘加括號
題意 多邊形遊戲,有n個頂點的多邊形,3 n 50 多邊形有n條邊,每個頂點中有乙個數字 可正可負 每條邊上或者是 號,或者是 號。邊從1到n編號,首先選擇一條邊移去,然後進行如下操作 1 選擇一條邊e和邊e連線著的兩個頂點v1,v2 2 用乙個新的頂點代替邊e和v1 v2,新頂點的值為v1 v2中...
POJ 1179 列舉 區間 DP
題意 傳送門 poj 1179 題解列舉初始時刪的邊,將環拆成鏈。觀察刪邊 縮點的過程,有明顯的區間性質,考慮用區間 dpdp dp求解。由於點權值可能出現負數,那麼在狀態轉移求最大值的過程中,要考慮負負得正的情況。d p i j 2 dp i j 2 dp i j 2 代表區間 i,j i,j i...