思路
简单的LCS,只不过判断的时候要判断两个属性,宽和高
注意
next_permutation用法
sort(a , a + n); //这里忘了,导致全排列没求完整
do {
}while(next_permutation(a, a + n))
代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1010;
struct Brick{
int x, y, z;
}brick[N];
int n;
int num[3];
int f[N];
bool cmp(Brick a, Brick b) {
if(a.x == b.x)
return a.y < b.y;
return a.x < b.x;
}
int main(){
int k = 1;
while(~scanf("%d", &n)) {
if(!n) break;
int cnt = 0;
for(int i = 0; i < n; i ++) {
int a, b, c;
cin >> a >> b >> c;
num[0] = a, num[1] = b, num[2] = c;
sort(num, num + 3);
do {
brick[cnt].x = num[0], brick[cnt].y = num[1], brick[cnt].z = num[2], cnt ++;
}while(next_permutation(num, num +3));
}
sort(brick, brick + cnt, cmp);
memset(f, 0, sizeof f);
int ans = 0;
for(int i = 0; i < cnt; i ++){
f[i] = brick[i].z;
for(int j = 0; j < i; j ++) {
if(brick[j].x < brick[i].x && brick[j].y < brick[i].y) {
f[i] = max(f[i], f[j] + brick[i].z);
}
}
ans = max(ans, f[i]);
}
printf("Case %d: maximum height = %d\n", k ++, ans);
}
return 0;
}
HDU1069 Monkey and Banana
思路
简单的LCS,只不过判断的时候要判断两个属性,宽和高
注意
next_permutation用法
sort(a , a + n); //这里忘了,导致全排列没求完整
do {
}while(next_permutation(a, a + n))
代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1010;
struct Brick{
int x, y, z;
}brick[N];
int n;
int num[3];
int f[N];
bool cmp(Brick a, Brick b) {
if(a.x == b.x)
return a.y < b.y;
return a.x < b.x;
}
int main(){
int k = 1;
while(~scanf("%d", &n)) {
if(!n) break;
int cnt = 0;
for(int i = 0; i < n; i ++) {
int a, b, c;
cin >> a >> b >> c;
num[0] = a, num[1] = b, num[2] = c;
sort(num, num + 3);
do {
brick[cnt].x = num[0], brick[cnt].y = num[1], brick[cnt].z = num[2], cnt ++;
}while(next_permutation(num, num +3));
}
sort(brick, brick + cnt, cmp);
memset(f, 0, sizeof f);
int ans = 0;
for(int i = 0; i < cnt; i ++){
f[i] = brick[i].z;
for(int j = 0; j < i; j ++) {
if(brick[j].x < brick[i].x && brick[j].y < brick[i].y) {
f[i] = max(f[i], f[j] + brick[i].z);
}
}
ans = max(ans, f[i]);
}
printf("Case %d: maximum height = %d\n", k ++, ans);
}
return 0;
}