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 |
有没有大神过目,是哪里的问题用last记录上一个进入的人 #include <iostream> #include <algorithm> using namespace std; typedef struct { int time; int prosperity; int stoutness; } Gangster; Gangster gangsters[150]; int val[150];//val[i]为前i个人进入时可获得的最大收益,val[i] = max{ val[k] + (ok() ? p[i] : 0) }ok()判断第i个人是否可以进入 int last[150];//last[i]为前i个人中最后一个进入的人 bool myCompare(const Gangster &g1, const Gangster &g2) { return g1.time < g2.time; } int main() { int N, K, T; while (cin >> N >> K >> T) { gangsters[0].time = 0; gangsters[0].prosperity = 0; gangsters[0].stoutness = 0; for (int i = 1; i <= N; ++i) cin >> gangsters[i].time; for (int i = 1; i <= N; ++i) cin >> gangsters[i].prosperity; for (int i = 1; i <= N; ++i) cin >> gangsters[i].stoutness; sort(gangsters + 1, gangsters + 1 + N, myCompare);//按时间排序!!!注意排序范围 for (int i = 0; i <= N; ++i) { val[i] = 0; last[i] = 0; } for (int i = 1; i <= N; ++i) for (int j = 0; j < i; ++j) { int tmp = val[j]; bool in = false;//第i个人是否进入 if (gangsters[i].time <= T && gangsters[i].stoutness <= K && gangsters[i].prosperity != 0)//满足时间和大门条件!!!且收益不为零 { if ((gangsters[i].time - gangsters[last[j]].time) >= abs(gangsters[i].stoutness - gangsters[last[j]].stoutness))//第i个人可以进入 { tmp += gangsters[i].prosperity; in = true; } } if (tmp > val[i]) { val[i] = tmp; last[i] = in ? i : j; } } cout << val[N] << endl; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator