9.21华为机试
我原以为自己最近算法刷得还不错,又被打回了原形。。。。。
第一道题,一个简单的二分,不过就是样例只能过85%,想了好久没想出来错的原因。
第二道题,开始看以为就是一个简单的bfs就好了,仔细一看发现事情没有那么简单,驿站可以兵变马,还可以马变兵,而且这还算一步,那bfs的正确性感觉都没有办法保证。就算用dijkstra,可是如果这个点换成兵或者马之后,dist是在这个点加一,还是怎么处理。woc,这玩意咋处理,我只是一个算法小菜鸡,请不要这样折磨我。
第三道题,最气的就是这道题,我看着很简单啊,不就是要一个序列化dp嘛,可是为什么就是死活通过0%,调了一个多小时,还是0%,难过啊!!!
贴一份代码,哪位老哥给我指点指点,今晚上觉都睡不舒服了。
#include <iostream> using namespace std; const int N = 10010; int p[N], r[N], w[N]; int f[N]; int n; int main() { cin >> n; for(int i = 0; i < n; i++) cin >> p[i]; for(int i = 0; i < n; i++) cin >> r[i]; for(int i = 0; i < n; i++) cin >> w[i]; for(int i = 0; i < n; i++) { for(int j = 0; j <= p[i] - r[i]; j++) { f[p[i] + r[i]] = max(f[p[i] + r[i]], f[j] + w[i]); } } int res = 0; for(int i = 0; i < n; i++) res = max(res, f[p[i] + r[i]]); cout << res << endl; return 0; }
贴一份代码,哪位老哥给我指点指点,今晚上觉都睡不舒服了。
//我感觉我的代码是f里面的下标可能越界,因为r的数据范围有点大,不过也不太清楚怎么改,请各位大佬指点!