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 |
WA了好多次求助数据中不会出现SI = 0的情况吧。 我是先按时间从小到大排序(即按g[i].t排序),然后方程是d[i] = max(d[j]+g[i].p); (j<i&& fabs(g[i].s-g[j].s)<=g[i].t-g[j].t) 请问方程有错吗? 下面是我的代码,谢谢。。 o(∩_∩)o //////////////////////////////////////////////////////////////////////////// #include <iostream> #include <cmath> #include <algorithm> #include <cstdio> using namespace std; const int MAXN = 110; struct ganster { int t,p,s; ganster() { t = p = s = 0; } }; int d[MAXN]; ganster g[MAXN]; int n,k,t; int ans = 0; bool cmp(ganster g1,ganster g2) { if(g1.t==g2.t) { return g1.s<g2.s; } return g1.t < g2.t; } void dp() { d[0]=0; ans = 0; //cout<<ans<<endl; for (int i=1;i<=n;i++) { for (int j=0;j<i;j++) { if (((int)fabs((g[i].s-g[j].s))<=(g[i].t-g[j].t))) { // cout<<"g[i]"<<g[i].s<<" "<<g[j].s<<endl; if (g[i].p+d[j]>d[i]) { // cout<<g[i].p<<" "<<d[j]<<endl; d[i] = (g[i].p + d[j]); } } } if (d[i]>ans) { //cout<<i<<endl; ans = d[i]; } } } int main() { scanf("%d%d%d",&n,&k,&t); for (int i=1;i<=n;i++) { scanf("%d",&g[i].t); } for (int i=1;i<=n;i++) { scanf("%d",&g[i].p); /* if(g[i].t==0&&g[i].s!=0) { g[i].p = 0; }*/ } for (int i=1;i<=n;i++) { scanf("%d",&g[i].s); /* if(g[i].s==0) { ans += g[i].p; }*/ } sort(g+1,g+n+1,cmp); g[0].s = 0;g[0].t = 0; dp(); printf("%d\n",ans); return 0; } //////////////////////////////////////////////////////// Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator