题目链接:
题意:巴比伦塔:
给出n种立方体,一个立方体能放到另一个立方体上,必须满足,底面一定要小于下面的立方体。求巴比伦塔最多堆多高?
分析:
DAG很容易想到,主要是状态的描叙。
一个立方体,他有3种情况,状态的描叙就用dp[id][3],此时dp[][i] I 来记录哪个是高。
#includeusing namespace std;int blocks[35][3];int d[35][3];int n;void get_dimensions(int *v,int b,int dim) { int idx = 0; for(int i=0;i<3;i++) { if(i!=dim) v[idx++] = blocks[b][i]; }}int dp(int i,int j){ int& ans = d[i][j]; if(ans>0) return ans; ans = 0; int v[2],v2[2]; get_dimensions(v,i,j); for(int a=0;a