Monkey and Banana HDU - 1069(dp)

原题地址:点击
一道简单的dp题,求最长的递减子序列,不过得先排个序,先给出运算符重载的代码

struct node {
	int x,y,z;
	bool operator < (const node & a)const {
		if(x != a.x) 
			return x > a.x;
		return y > a.y;
	}//排序方式,长度相同则看宽度
	bool operator >(const node & a)const {
		return x > a.x && y > a.y;//方便后面做比较
	}
};

一个长方体有6种摆放的方式,可以用不定长数组来写,再用初始化列表代码会更简介
附上ac码:

#include<bits/stdc++.h>
using namespace std;
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
struct node {
	int x,y,z;
	bool operator < (const node & a)const {
		if(x != a.x) 
			return x > a.x;
		return y > a.y;
	}
	bool operator >(const node & a)const {
		return x > a.x && y > a.y;
	}
};
int dp[200];
int main() {
	fio
	int n, x, y, z, ca = 0;;
	while(cin >> n,n) {
		ca++;
		memset(dp, 0, sizeof(dp));
		vector<node> q;
		while(n--) {
			cin >> x >> y >> z;
			q.push_back(node{x,y,z});q.push_back(node{y,x,z});
			q.push_back(node{x,z,y});q.push_back(node{z,x,y});
			q.push_back(node{z,y,x});q.push_back(node{y,z,x});
		}
		sort(q.begin(), q.end());
		int len = q.size(), Max = 0;
		for (int i = 0; i < len; i++) {
			dp[i] = q[i].z;
			for (int j = 0; j < i; j++) {
				if(q[j] > q[i]) 
					dp[i] = max(dp[i], dp[j] + q[i].z);
				Max = max(Max, dp[i]);
			}
		}
		printf("Case %d: maximum height = %d\n", ca, Max);
	}
}
全部评论

相关推荐

服从性笔试吗,发这么多笔,现在还在发。
蟑螂恶霸zZ:傻 x 公司,发两次笔试,两次部门匹配挂,
投递金山WPS等公司10个岗位 >
点赞 评论 收藏
分享
10-09 22:05
666 C++
找到工作就狠狠玩CSGO:报联合国演讲,报电子烟设计与制造
点赞 评论 收藏
分享
ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务