class Solution {
public:
int minimumTotal(vector<vector<int>>& triangle) {
int m=triangle.size();
if(m==0)
return 0;
vector<int> f(m,INT_MAX);
f[0]=triangle[0][0];
for(int i=1;i<m;i++){
for(int j=triangle[i].size()-1;j>0;j--){
f[j]=min(f[j],f[j-1])+triangle[i][j];//!!!!j
}
f[0]=f[0]+triangle[i][0];
}
int res=INT_MAX;
for(int i=0;i<m;i++)
res=min(res,f[i]);
return res;
}
};