接金币这个c++代码理解不了,求解释

来源:互联网 发布:文华程序交易模型源码 编辑:程序博客网 时间:2024/06/05 12:06
原题链接:http://exercise.acmcoder.com/online/online_judge_ques?ques_id=3009&konwledgeId=134#include <iostream>#include <vector>#include <algorithm>using namespace std;#define INF 0x3f3f3f3ftypedef pair<int, int> p;bool compare(p p1,p p2){return p1.second < p2.second;}int getcoin(vector<p> vec, int pos, int time){int res = 0;for (int i = 0; i < vec.size(); i++){if (vec[i].first == pos&&vec[i].second == time){res++;}if (vec[i].second > time)break;}return res;}int main(){int n;cin >> n;vector<p> vec;for (int i = 0; i < n; i++){p p1;cin >> p1.first >> p1.second;vec.push_back(p1);}int dp[11][2];for (int i = 0; i <= 10; i++){for (int j = 0; j < 2; j++)dp[i][j] =-INF;}dp[5][0] = 0;sort(vec.begin(), vec.end(), compare);int T = vec[vec.size() - 1].second;for (int t = 0; t <=T; t++)for (int j = 0; j <= 10; j++){for (int k = -1; k <= 1; k++){if (dp[j][t%2] == -INF)break;else{dp[j + k][(t + 1) % 2] = max(dp[j + k][(t + 1) % 2],dp[j][t%2]+getcoin(vec,j+k,t+1));//这行理解不了啊}}}int ans = 0;for (int i = 0; i <= 10; i++){ans = ans>dp[i][T % 2] ? ans : dp[i][T % 2];}cout << ans;return 0;}