| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
100题,贴个代码,见笑。。。#include<iostream>
#include<algorithm>
using namespace std;
struct Block
{
int x;
int y;
int z;
};
int cmp(Block a, Block b)
{
if(a.x < b.x)
return 1;
else if(a.x > b.x)
return 0;
else if(a.y < b.y)
return 1;
else
return 0;
}
int go(Block *block, int n)
{
sort(block, block + n, cmp);
int dp[n];
for(int i = 0; i < n; ++i)
dp[i] = block[i].z;
for(int i = 1; i < n; ++i)
{
for(int j = 0; j < i; ++j)
if(block[j].x < block[i].x && block[j].y < block[i].y)
dp[i] = max(dp[i], dp[j] + block[i].z);
}
return *max_element(dp, dp + n);
}
int main()
{
int n;
for(int i = 1; 1; ++i)
{
cin>>n;
if(0 == n)
return 0;
Block block[6 * n];
for(int j = 0; j < n; ++j)
{
cin>>block[6 * j].x>>block[6 * j].y>>block[6 * j].z;
block[6 * j + 1].x = block[6 * j].y;
block[6 * j + 1].y = block[6 * j].x;
block[6 * j + 1].z = block[6 * j].z;
block[6 * j + 2].x = block[6 * j].y;
block[6 * j + 2].y = block[6 * j].z;
block[6 * j + 2].z = block[6 * j].x;
block[6 * j + 3].x = block[6 * j].z;
block[6 * j + 3].y = block[6 * j].y;
block[6 * j + 3].z = block[6 * j].x;
block[6 * j + 4].x = block[6 * j].x;
block[6 * j + 4].y = block[6 * j].z;
block[6 * j + 4].z = block[6 * j].y;
block[6 * j + 5].x = block[6 * j].z;
block[6 * j + 5].y = block[6 * j].x;
block[6 * j + 5].z = block[6 * j].y;
}
cout<<"Case "<<i<<": maximum height = "<<go(block, 6 * n)<<endl;
}
return 0;
}
Followed by: Post your reply here: |