HD 48DP 1069(最长递增子序列)?
2018-04-02 20:59
274 查看
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1069
别人的方法和我有点不一样- -?我的是真的暴力。。。。不过也可以优化。不过数据很小也懒得了。
别人的方法和我有点不一样- -?我的是真的暴力。。。。不过也可以优化。不过数据很小也懒得了。
#include <bits/stdc++.h> #define INF 1e18 #define inf 1e9 #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define IOS ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0) using namespace std ; typedef long long ll; typedef unsigned long long ull; const int _max = 35*6; struct node{ int x,y,z; }a[_max]; int dp[_max],n,cnt; bool cmp(node n1,node n2){ if(n1.x == n2.x) return n2.y<n1.y; else return n1.x>n2.x; } void solve(int i,node n1){ a[i+n] = n1; swap(a[i+n].x,a[i+n].y); a[i+2*n] = n1; swap(a[i+2*n].y,a[i+2*n].z); a[i+3*n] = a[i+2*n]; swap(a[i+3*n].x,a[i+3*n].y); a[i+4*n] = a[i+2*n]; swap(a[i+4*n].x,a[i+4*n].z); a[i+5*n] = a[i+4*n]; swap(a[i+5*n].x,a[i+5*n].y); } int main(){ int Cas=0; while(cin>>n && n){ cnt = -inf; for(int i = 1 ; i <= n ; i++){ cin>>a[i].x>>a[i].y>>a[i].z; solve(i,a[i]); } n*=6; sort(a+1,a+n+1,cmp); for(int i = 1 ; i <= n ; i++) dp[i] = a[i].z; for(int i = 2 ; i <= n ; i++){ for(int j = 1 ; j < i ; j++){ if(a[i].x < a[j].x && a[i].y < a[j].y){ dp[i] = max(dp[i],dp[j]+a[i].z); } } cnt = max(cnt,dp[i]); } /* for(int i = 1 ; i <= n ; i++) cout<<a[i].x<<' '<<a[i].y<<' '<<a[i].z<<endl; for(int i = 1 ; i <= n ; i++) cout<<dp[i]<<' '; cout<<endl; */ cout<<"Case "<<++Cas<<": maximum height = "; cout<<cnt<<endl; } return 0; }
相关文章推荐
- hdu1069长方体堆砌.如何转化为最长递增子序列
- hdu 1069 Monkey and Banana--最长递增子序列
- 杭电oj 1069 Monkey and Banana 最长递增子序列
- HDU Monkey and Banana 1069 dp 动态规划 最长递增子序列
- 经典算法实现(最长公共子序列,最长递增子序列)
- 最长单调"连续"递增子序列
- 设计一个O(n2)时间的算法,找出由n个数组成的序列的最长单调递增子序列。
- 【最长递增子序列+(不下降)二分栈】Educational Codeforces Round 15
- 【动态规划】拦截导弹_dilworth定理_最长递增子序列
- Super Jumping! Jumping! Jumping!(求最长递增子序列之和)
- 1134 最长递增子序列
- SOJ 2433 最长递增子序列
- 最长递增子序列&&最长公共子序列&&最长公共子串
- 网络流24题:最长递增子序列问题
- 单调最长递增子序列
- 洛谷P2766 最长递增子序列问题
- 【动态规划】 最长递增子序列
- 编程之美_012求数组中最长递增子序列
- 动态规划求解01背包问题,最长递增子序列
- longest increasing subsequence (最长递增子序列)