关于盒马10.15号笔试的最后一题
谁能告诉我为什么AC不了,是我的思路有问题吗?
按照时间排序,从前往后dp,检查下来没啥问题,但是只AC了40%,有没有大佬指教下
```
const int N = 1e6+5;
int f[N];
struct Node{
int x,y,s,t;
};
bool cmp(Node &o1,Node &o2){
return o1.t < o2.t;
}
Node node[N];
inline int dis(int x1,int y1,int x2,int y2){
return abs(x1-x2) + abs(y1-y2);
}
int main() {
int n,m,k;
memset(f,0,sizeof f);
cin >> n >> m >> k;
int ans = 0;
for(int i = 0; i < k; i++){
cin >> node[i].x >> node[i].y >> node[i].t >> node[i].s;
}
sort(node,node+k,cmp);
for(int i = 0;i < k; i++){
if(dis(1,1,node[i].x,node[i].y) <= node[i].t) f[i] = node[i].s;
for(int j = 0; j < i; j++){
if(dis(node[i].x,node[i].y,node[j].x,node[j].y) <= node[i].t-node[j].t){
f[i] = max(f[i],f[j]+node[i].s);
}
}
ans = max(ans,f[i]);
}
cout << ans << endl;
return 0;
}
```
按照时间排序,从前往后dp,检查下来没啥问题,但是只AC了40%,有没有大佬指教下
```
const int N = 1e6+5;
int f[N];
struct Node{
int x,y,s,t;
};
bool cmp(Node &o1,Node &o2){
return o1.t < o2.t;
}
Node node[N];
inline int dis(int x1,int y1,int x2,int y2){
return abs(x1-x2) + abs(y1-y2);
}
int main() {
int n,m,k;
memset(f,0,sizeof f);
cin >> n >> m >> k;
int ans = 0;
for(int i = 0; i < k; i++){
cin >> node[i].x >> node[i].y >> node[i].t >> node[i].s;
}
sort(node,node+k,cmp);
for(int i = 0;i < k; i++){
if(dis(1,1,node[i].x,node[i].y) <= node[i].t) f[i] = node[i].s;
for(int j = 0; j < i; j++){
if(dis(node[i].x,node[i].y,node[j].x,node[j].y) <= node[i].t-node[j].t){
f[i] = max(f[i],f[j]+node[i].s);
}
}
ans = max(ans,f[i]);
}
cout << ans << endl;
return 0;
}
```
全部评论
相关推荐
嘀哩咕噜说啥呢:小米辣吗
,那举办了

点赞 评论 收藏
分享