DP_NYOJ18/NYOJ171
NYOJ18http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=18
数字三角形问题, 要求从第一个点开始,每次只能走右下或者左下的点,要求路过的点的数据之和最大
/************************************************************* * > File Name: 018_数字三角形.cpp * > Author: weigang * > Mail: w_wg@qq.com * > Created Time: 2018年05月22日 星期二 16时01分54秒 *************************************************************/ #include<bits/stdc++.h> using namespace std; int a[105][105],b[105][105]; int main(void) { int n,i,j; scanf("%d",&n); for(i = 0; i < n; ++i) for(j = 0; j <= i; ++j) scanf("%d",&a[i][j]); for(j = 0; j < n; j++) b[n][j] = a[n][j]; for(i = n-1; i >= 0; i--) for(j = 0; j < n; j++) b[i][j] = a[i][j] + max(b[i+1][j],b[i+1][j+1]); printf("%d\n",b[0][0]); return 0; }
NYOJ171 http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=171
题目跟上面的差不多,要求从第一个点开始到最右下角的点,每次只能右移或下移,要求经过的点之和最大
/************************************************************* * > File Name: 171_聪明的kk.cpp * > Author: weigang * > Mail: w_wg@qq.com * > Created Time: 2018年05月23日 星期三 15时16分38秒 *************************************************************/ #include<bits/stdc++.h> using namespace std; int a[25][25],t[25][25]; int main(void) { int m,n,i,j,my_max = 0; cin >> n >> m; for(i = 0; i < n; ++i) for(j = 0; j < m; ++j) scanf("%d",&a[i][j]); my_max = t[0][0] = a[0][0]; for(i = 1; i < m; ++i) { t[0][i] = t[0][i-1] + a[0][i]; if(t[0][i] > my_max) my_max = t[0][i]; } for(j = 1; j < n; ++j) { t[j][0] = t[j-1][0] + a[j][0]; if(t[j][0] > my_max) my_max = t[j][0]; } for(i = 1; i < n; ++i) for(j = 1; j < m; ++j) { t[i][j] = a[i][j] + max(t[i-1][j],t[i][j-1]); if(t[i][j] > my_max) my_max = t[i][j]; } printf("%d\n",my_max); return 0; }

浙公网安备 33010602011771号