| ||||||||||
| 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