偶尔所见,希望给大家一点参考。 美团第四题,是状态转换,我觉得应该归为DP。 前四道AC,第五道47%(因为用暴力搜索,时间超时) 第一题注意格式(我是负号格式没注意,修改了很久)。 第二题是寻找自己是否超过了前面的人,我使用循环,然后依次匹配。 第三题是修bug,一方面是等比数列求和的知识。具体见图(写不下了) 见图片。 using namespace std; const int need_mod = 1000000007; int main() { int K;//允许走的步数 cin >> K; if(K==0)cout << 1; else if(K==1)cout << 0; else if(K==2)cout << 3; else if(K==3)cout << 6; if(K<=3){ return 0; } //初始化 int dpS = 1, dpS_pre; int dpA = 0, dpB = 0, dpC = 0; int dpA_pre, dpB_pre, dpC_pre; for(int i=1; i<=K; i++){ //第i步的操作 dpS_pre = dpS; dpA_pre = dpA; dpB_pre = dpB; dpC_pre = dpC; dpS = ((dpA_pre + dpB_pre)%need_mod + dpC_pre)%need_mod;//dpA、dpB、dpC此时 i-1步,在这些位置 dpA = ((dpB_pre + dpC_pre)%need_mod + dpS_pre)%need_mod; dpB = ((dpA_pre + dpC_pre)%need_mod + dpS_pre)%need_mod; dpC = ((dpA_pre + dpB_pre)%need_mod + dpS_pre)%need_mod; } cout << dpS; }