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 求大神相救 贴上代码 和 思路#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