动态规划,最大上升子序列和。不同的是给的是长方体。
为了方便处理,笔者直接将每个长方体当做三个长方体处理,每个长方体的长大于等于宽。然后以长为主,宽为辅排序。
然后就和之前的那道FatMouse‘s speed一样了,当符合条件是,更新最大值。
下面是笔者第一次AC的代码:
#include#include using namespace std;struct State{ int length; int width; int height; int sum;} s[100];int cmp(const State& a,const State& b){ if(a.length!=b.length) return (a.length >n && n) { for(i=0;i >a>>b>>c; if(a==b && b==c) s[i].height=s[i].length=s[i].width=s[i].sum=a; else { s[i+2].length=s[i+1].height=s[i].length=a>b?(a>c?a:c):(b>c?b:c); s[i+2].width=s[i+1].width=s[i].height=a s[j].length && s[i].width>s[j].width && s[i].sum
然后,笔者又把代码精简了一点点(笔者非常喜欢短一点。。。测试AC了):
#include#include using namespace std;struct State{ int length; int width; int height; int sum;} s[100];int cmp(const State& a,const State& b){ if(a.length!=b.length) return (a.length >n && n) { for(i=0;i >a>>b>>c; if(a==b && b==c) s[i].height=s[i].length=s[i].width=s[i].sum=a; else { s[i+2].length=s[i+1].sum=s[i+1].height=s[i].length=a>b?(a>c?a:c):(b>c?b:c); s[i+2].width=s[i+1].width=s[i].sum=s[i].height=a s[j].length && s[i].width>s[j].width) if(max<(s[i].sum=s[j].sum+s[i].height)) max=s[i].sum; cout<<"Case "< <<": maximum height = "< <