标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)
Total Submission(s): 4502 Accepted Submission(s): 1224
#include<iostream> #include<cstring> #include<cstdio> #include<vector> #include<algorithm> #include<cmath> using namespace std; const int MAXN = 1010; typedef long long LL; struct Node{ int w, h, c, d; void init(){ scanf("%d%d%d%d", &w, &h, &c, &d); if(w > h){ swap(w, h); } } friend bool operator < (Node a, Node b){ if(a.h != b.h) return a.h < b.h; if(a.w != b.w) return a.w < b.w; return a.d > b.d; } }; Node dt[MAXN]; LL dp[MAXN]; bool js(Node a, Node b){ if(b.d == 2 && a.w < b.w && a.h < b.h) return true; else if(b.d == 1 && a.w <= b.w && a.h <= b.h && (a.w < b.w || a.h < b.h)) return true; else if(b.d == 0 && a.w <= b.w && a.h <= b.h) return true; return false; } int main(){ int n; while(~scanf("%d", &n), n){ for(int i = 0; i < n; i++){ dt[i].init(); } sort(dt, dt + n); memset(dp, 0, sizeof(dp)); LL ans = 0; for(int i = 0; i < n; i++){ dp[i] = dt[i].c; for(int j = 0; j < i; j++){ if(js(dt[j], dt[i])) dp[i] = max(dp[i], dp[j] + dt[i].c); } ans = max(ans, dp[i]); } printf("%lld\n", ans); } return 0; }
标签:
原文地址:http://www.cnblogs.com/handsomecui/p/5523245.html