행렬 연승 동적 기획
2064 단어 동적 기획
#include<iostream>
using namespace std;
const int MAX = 100;
int m[MAX][MAX], s[MAX][MAX];
int n;
int opt[MAX][MAX], path[MAX][MAX];
int p[MAX];
void matrixChain() {
for (int i = 1; i <= n; i++)
m[i][i] = 0;
for (int r = 2; r <= n; r++) //
{
cout << r << endl;
for (int i = 1; i <= n - r + 1; i++) { //
int j = r + i - 1; //
// m[i][j] , , k=i
m[i][j] = m[i][i] + m[i + 1][j] + p[i - 1] * p[i] * p[j];
s[i][j] = i;
//k i+1 j-1 m[i][j]
for (int k = i + 1; k < j; k++) {
int temp = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j];
if (temp < m[i][j]) {
m[i][j] = temp;
//s[][] i-j , k
//
s[i][j] = k;
}
}
}
}
}
void mc(){
for(int i=1; i<=n; i++){
}
}
// start end
int f(int start, int end) {
if (opt[start][end] != 0)
return opt[start][end];
if (start == end)
return 0;
if (start == end - 1) {
return opt[start][end] = p[start - 1] * p[start] * p[end];
}
int min = 1000000;
for (int i = start ; i < end; i++) {
int temp = f(start, i) + f(i+1, end) + p[start - 1] * p[i] * p[end] ;
if (min > temp) {
min = temp;
}
}
return opt[start][end] = min;
}
int main() {
cin >> n;
for (int i = 0; i <= n; i++)
cin >> p[i];
//
//A1[30*35],A2[35*15],A3[15*5],A4[5*10],A5[10*20],A6[20*25]
// p[0-6]={30,35,15,5,10,20,25}
// :6 30 35 15 5 10 20 25
matrixChain();
for (int i = 0; i <= n; i++)
for (int j = 0; j <= n; j++){
opt[i][j] = 0;
m[i][j] = 0;
}
//
cout << f(1, n) << endl;
//traceback(1,n);
// m[1][n];
cout << m[1][n] << endl;
// for (int i = 0; i <= n; i++) {
// for (int j = 0; j <= n; j++) {
// cout << opt[i][j] << " ";
// }
// cout << endl;
// for (int j = 0; j <= n; j++) {
// cout << m[i][j] << " ";
// }
// cout << endl << endl;
// }
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
01 가방, 완전 가방, 다중 가방 dp(동적 기획 입문 dp)01 가방은 2진법으로 직접 표시할 수 있지만 데이터 양이 너무 많으면 시간을 초과하는 것이 폭력이다.01 가방의 사상은 바로 이 물품에 대해 내가 넣은 가치가 큰지 안 넣은 가치가 큰지 비교하여 방정식 f[i][v...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.