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 |
怎么大牛写的都那么复杂啊,若菜一维dpdp[i]表示当前第i个人为最后一个人时获得的最大值,dp[i] = MAX(dp[i] , dp[j] + pi[i]); 附代码,求指教: #include <iostream> #include <cstdio> #include <memory.h> #include <algorithm> using namespace std; const int maxn = 102; struct gangster { int ti,pi,si; bool operator < (const gangster &other) const { return ti < other.ti; } }G[maxn]; int dp[maxn]; int n,k,t,top; int ABS(int x) { return x >= 0 ? x : (-x); } int MAX(int a,int b) { return a > b ? a : b; } void read() { memset(dp,0,sizeof(dp)); top = 0; for(int i=1;i<=n;i++) { scanf("%d",&G[i].ti); } for(int i=1;i<=n;i++) { scanf("%d",&G[i].pi); } for(int i=1;i<=n;i++) { scanf("%d",&G[i].si); } for(int i=1;i<=n;i++) { if(G[i].si <= k && G[i].ti <= t) { G[++top] = G[i]; } } G[0].ti = G[0].pi = G[0].si = 0; sort(G + 1 , G + top + 1); return; } void solve() { for(int i=1;i<=top;i++) { for(int j=0;j<i;j++) { if((j == 0 || dp[j] > 0) && ABS(G[i].si - G[j].si) <= G[i].ti - G[j].ti) { dp[i] = MAX(dp[i] , dp[j] + G[i].pi); } } } int ans = 0; for(int i=1;i<=top;i++) { ans = MAX(ans , dp[i]); } printf("%d\n",ans); return; } int main() { while(~scanf("%d %d %d",&n,&k,&t)) { read(); solve(); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator