第三章作业
动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。
第一题递归:
for(int i = 1; i <= n; i++){
for(int j = 0; j <= i; j++){
if(num[i]>num[j])
dp[i] = dp[i]>dp[j]+1?dp[i]:dp[j]+1;
}
max = max>dp[i]?max:dp[i];
}
第二题:
for(int i = 1; i < n; i++){
for(int j = i+1; j <= n; j++){
cin >> f[j];
if(i==1)
dp[j] = f[j];
else
dp[j] = dp[j]<f[j]+dp[i]?dp[j]:f[j]+dp[i];
}
}
结队心得:
首先是各自做一下题目看各自的想法有什么不一样,或者是很一致的地方,然后再去选择是我的方法更好还是队友的方法更加简洁明了有效,然后互相吸取经验,完成题目。