1 条题解
-
0
C :
#include<stdio.h> #define max(a,b) (a>b?a:b) int m,n; int a[110][110]; int main() { scanf("%d %d",&m,&n); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) scanf("%d",&a[i][j]); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) a[i][j]=max(a[i-1][j],a[i][j-1])+a[i][j]; printf("%d",a[m][n]); return 0; }C++ :
#include<iostream> #include<cstring> using namespace std; int max(int a,int b){ if(a>b) return a; else return b; } int main(){ int n;//组数 int b[101][101];//花生地中的花生数 //初始化花生地 memset(b,0,sizeof(b)); int x,y;//花生地的行列 cin>>x>>y;//读入花生地的行列 //读入每块地种多少花生 //这里i和j从1开始,为的是下面判断i-1,j-1的时候边界值省得特殊处理 for(int i=1;i<=x;i++){ for(int j=1;j<=y;j++){ cin>>b[i][j]; } } //第推找最大值 for(int i=1;i<=x;i++){ for(int j=1;j<=y;j++){ //从上面过来划算,还是从左边过来划算 b[i][j]+=max(b[i-1][j],b[i][j-1]); } } cout<<b[x][y]; }Java :
import java.util.Scanner; public class Main { static int m,n; static int a[][] = new int[101][101]; public static void main(String[] args){ Scanner sc = new Scanner(System.in); m = sc.nextInt(); n = sc.nextInt(); int i,j; for(i=1;i<=m;i++) { for(j=1;j<=n;j++) { a[i][j] = sc.nextInt(); } } for(i=1;i<=m;i++) { for(j=1;j<=n;j++) { if(i==1 && j==1) continue; else if(j>1 && i==1) a[i][j] = a[i][j-1] + a[i][j]; else if(i>1 && j==1) a[i][j] = a[i-1][j] + a[i][j]; else { a[i][j] = Math.max(a[i-1][j],a[i][j-1]) + a[i][j]; } } } System.out.println(a[m][n]); sc.close(); } }Python :
sr=input().split() m=int(sr[0]) n=int(sr[1]) a=[[0 for i in range(n)] for j in range(m)] s=[[0 for i in range(n)] for j in range(m)] for i in range(m): sr=input().split() for j in range(n): a[i][j]=int(sr[j]) for i in range(m): for j in range(n): if(i>0 and j>0): s[i][j]=a[i][j]+max(s[i-1][j],s[i][j-1]) elif(i>0): s[i][0]=a[i][0]+s[i-1][0] elif(j>0): s[0][j]=a[0][j]+s[0][j-1] else: s[0][0]=a[0][0] print(s[m-1][n-1])
- 1
信息
- ID
- 278
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者