数字三角形最大路径和:代码优化及错误分析
///'你的代码有误的原因是对于偶数行的情况下,你没有正确处理路径向左下走和向右下走的次数相差不能超过1的限制条件。//n//n在偶数行的情况下,路径向左下走和向右下走的次数相差不能超过1,也就是说,如果路径向左下走的次数和向右下走的次数相等,那么路径的长度就是偶数;如果路径向左下走的次数比向右下走的次数多1,那么路径的长度就是奇数。所以对于偶数行的情况,你需要分别计算路径长度为偶数和奇数的情况。//n//n以下是修改后的代码://n//ncpp//n#include ///'iostream///'//n#include ///'vector///'//nusing namespace std;////n//nint main()//n{//n int N; //n cin >> N; //n vector<vector<int>> V(N, vector<int>(N));//n vector<vector<int>> dp(N, vector<int>(N));//n//n for (int i = 0; i < N; i++) {//n for (int t = 0; t <= i; t++) {//n cin >> V[i][t];//n }//n }//n//n dp[0][0] = V[0][0];//n//n if (N % 2 != 0) {//n for (int i = 1; i < N; i++) {//n for (int t = 0; t <= i; t++) {//n if (t == 0) {//n dp[i][t] = dp[i - 1][t] + V[i][t];//n }//n else if (t == i) {//n dp[i][t] = dp[i - 1][t - 1] + V[i][t];//n }//n else {//n dp[i][t] = max(dp[i - 1][t], dp[i - 1][t - 1]) + V[i][t];//n }//n }//n }//n cout << dp[N - 1][N / 2];//n }//n else {//n vector<vector<int>> dp_even(N, vector<int>(N));//n vector<vector<int>> dp_odd(N, vector<int>(N));//n//n for (int i = 1; i < N; i++) {//n for (int t = 0; t <= i; t++) {//n if (t == 0) {//n dp_even[i][t] = dp_even[i - 1][t] + V[i][t];//n dp_odd[i][t] = dp_odd[i - 1][t] + V[i][t];//n }//n else if (t == i) {//n dp_even[i][t] = dp_even[i - 1][t - 1] + V[i][t];//n dp_odd[i][t] = dp_odd[i - 1][t - 1] + V[i][t];//n }//n else {//n dp_even[i][t] = max(dp_even[i - 1][t], dp_even[i - 1][t - 1]) + V[i][t];//n dp_odd[i][t] = max(dp_odd[i - 1][t], dp_odd[i - 1][t - 1]) + V[i][t];//n }//n }//n }//n//n cout << max(dp_even[N - 1][N / 2 - 1], dp_odd[N - 1][N / 2]);//n }//n//n return 0;//n}//n//n//n这样修改后的代码可以正确处理路径向左下走和向右下走的次数相差不能超过1的限制条件,可以通过测试数据。//n//n/
原文地址: http://www.cveoy.top/t/topic/pric 著作权归作者所有。请勿转载和采集!