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 |
问题出在sort,注意你的数据的下标是从1开始的//Re:一直WA 求大神相救 贴上代码 和 思路In Reply To:一直WA 求大神相救 贴上代码 和 思路 Posted by:xwd358527617 at 2011-09-24 20:18:37 > #include <iostream> > #include <cstdio> > #include <algorithm> > using namespace std; > > int N,T,K; > int v[101][101]; > int dp[101][101]; > > struct info > { > int t,s,p; > }; > > info rec[101]; > > bool cmp(info a,info b) > { > return a.t <= b.t; > } > > > int main() > { > scanf("%d%d%d",&N,&K,&T); > for(int i=1;i<=N;i++) > scanf("%d",&rec[i].t); > for(int i=1;i<=N;i++) > scanf("%d",&rec[i].p); > for(int i=1;i<=N;i++) > scanf("%d",&rec[i].s); > // 输入 数据 > sort(rec,rec + N,cmp); > // 按时间戳排序 > for(int i=1;i<=N;i++) > v[i][rec[i].s] += rec[i].p; > > //将数据存入v[i][j] ,表示 第i个时间戳 门的state为j时候的propersity > dp[0][0] = 1; > // dp表示 第i个时间戳 门的state为j时候的最大propersity. > //dp[0][0] = 1 开始时候 dp = 1是为了后面可以以此判断下个时间戳是否 //可以走到 > for(int i=1;i<=N;i++) > { > for(int j=0;j<=K;j++) > { > int di = rec[i].t - rec[i-1].t; > //时间差.. > int maxn = 0; > for(int k = (j-di>0?j-di:0) ;k<=(j+di<K?j+di:K);k++) > if(maxn < dp[i-1][k]) > maxn = dp[i-1][k]; > if(maxn) > dp[i][j] += v[i][j]; > dp[i][j] += maxn; > } > } > > int maxn = 0; > for(int i=0;i<=K;i++) > if(maxn < dp[N][i]) > maxn = dp[N][i]; > > if(maxn == 0) > printf("0"); > else > printf("%d\n",maxn - 1); > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator