简单的dp,本来ac的人少,以为很难.尝试着交了结果1y => Memory: 1004K Time: 32MSLanguage: G++ Faults:0 #include<iostream> //用max[i][j]储存在i树下,转移了j次情况下能得到的最多苹果数 int max[2][31]; int main() { int T,W; int res(0),tree; std::cin >> T >> W; for(int i=0; i<T; i++) { std::cin >> tree; for(int i=0; i<=W; i++) { //更新原来就在这棵树下获得的苹果数 max[tree-1][i]++; //如果由另一棵苹果树转过来更快的情况 if(i&&max[tree-1][i]<=max[2-tree][i-1]) max[tree-1][i]=max[2-tree][i-1]+1; } } for(int i=0; i<=W; i++) { res=res<max[0][i]?max[0][i]:res; res=res<max[1][i]?max[1][i]:res; } std::cout << res; return 0; }