rolling array ; triangle; from end to beginning add ; No aftereffect

来源:互联网 发布:戴尔公司网络品牌策划 编辑:程序博客网 时间:2024/06/03 17:02
class Solution {
public:
    vector<int> getRow(int k) {
    vector<int> vts;
    if(k == 0){
        vts.push_back(1);
        return vts;
    }
    if(k == 1){
        vts.push_back(1);
        vts.push_back(1);
        return vts;
    }
  
    for(int i = 0;i<k+1;++i)
    {
        if(i == 0 ||i == 1){
            vts.push_back(1);
        } else {// !!!!!
            vts.push_back(0);   
        } 
    }
  
    for(int p = 2;p<=k;++p){
        //for(int col = 1;col<=p;++col){
        for(int col = p;col>=1;--col){
            if(vts[col] == 0){
                vts[col] = 1;
            } else {
                vts[col] = vts[col]+vts[col-1];  
            }
        }
    }
  
    return vts;
}
};


for this one; we must add from the end to the beginning. 
if we add from the beginning to the end; 

for instance from 1,2,1 to 1,3,3,1 

if we add from beginning to the end;
we will get 
1,3,4,4; so it is wrong;
add from the ending will not influence the value behind; 
从前往后:
当前值的改变 会影响后面的值;
从后往前:

当前值的改变 不会影响后面的值;




================

无后效性是一个问题可以用动态规划求解的标志之一。
它是这样一种性质:某阶段的状态一旦确定,则此后过程的演变不再受此前各种状态及决策的影响,简单的说,就是“未来与过去无关”,当前的状态是此前历史的一个完整总结,此前的历史只能通过当前的状态去影响过程未来的演变。具体地说,如果一个问题被划分各个阶段之后,阶段I中的状态只能由阶段I-1中的状态通过状态转移方程得来,与其它状态没有关系,特别是与未发生的状态没有关系。从图论的角度去考虑,如果把这个问题中的状态定义成图中的顶点,两个状态之间的转移定义为边,转移过程中的权值增量定义为边的权值,则构成一个有向无环加权图,因此,这个图可以进行“拓扑排序”,至少可以按它们拓扑排序的顺序去划分阶段。

0 0
原创粉丝点击