HDU 1069 Monkey and Banana, hdu1069

Source: Internet
Author: User

HDU 1069 Monkey and Banana, hdu1069

I feel that the pure dp question is basically to calculate a maximum value for some numbers or objects.

There is a restricted relationship between the above layer and the placement of the next layer, so we need to add a flag to mark which is the original top layer, and then dp.

A certain type of Square is infinitely available, that is, it is equivalent to each type of square. In fact, there are three kinds of square, and each type of square can only be put one

Sort coordinates by x

Dp [I] [j] indicates the maximum height of the stacked I layer when the top layer is placed in the j Block.

Dp [I] [j] = max (dp [I] [j], dp [I-1] [0, 1, 2 .... l] + z [j])

Then add a judgment condition.

if((r[k].x>r[j].x&&r[k].y>r[j].y)||(r[k].y>r[j].x&&r[k].x>r[j].y))
At the beginning, I wrote
if(r[k].x>r[j].x&&r[k].y>r[j].y)
Always in WA

# Include <stdio. h> # include <algorithm> # include <string. h> using namespace std; const int inf = 1 <30; # define N 105 struct Rec {int x, y, z;} r [N]; int cmp (Rec a, Rec B) {if (. x = B. x) return. y> B. y; return. x> B. x;} int dp [N] [N]; // dp [I] [j]: In the front I block, maximum height void init () {memset (dp, 0, sizeof (dp) When block j is placed on the top layer;} int main () {# ifndef ONLINE_JUDGEfreopen ("in.txt", "r", stdin); # endifint n, cas = 1; while (scanf ("% d", & n), n) {init (); int l = 1, xx, yy, zz; for (int I = 0; I <n; I ++) {scanf ("% d", & xx, & yy, & zz); r [l]. x = xx; r [l]. y = yy; r [l ++]. z = zz; // r [l]. x = xx; r [l]. y = zz; r [l ++]. z = yy; r [l]. x = yy; r [l]. y = zz; r [l ++]. z = xx; // r [l]. x = yy; r [l]. y = xx; r [l ++]. z = zz; r [l]. x = zz; r [l]. y = xx; r [l ++]. z = yy; // r [l]. x = zz; r [l]. y = yy; r [l ++]. z = xx;} r [0]. x = inf; r [0]. y = inf; r [0]. z = inf; sort (r + 1, r + l, cmp); for (int I = 1; I <l; I ++) {// I is the layer of the tower. for (int j = I; j <l; j ++) {// j <I is meaningless, because j contains the maximum number of J-1, And I represents the number of layers for (int k = 0; k <l; k ++) {if (r [k]. x> r [j]. x & r [k]. y> r [j]. y) | (r [k]. y> r [j]. x & r [k]. x> r [j]. y) dp [I] [j] = max (dp [I] [j], dp [I-1] [k] + r [j]. z) ;}} int ans = 0; for (int I = 1; I <l; I ++) {for (int j = I; j <l; j ++) {ans = max (ans, dp [I] [j]) ;}} printf ("Case % d: maximum height = % d \ n ", cas ++, ans );}}


Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.