全部评论 7

  • 补充:如果是使用char数组时,而且输入时有空格时,可以用fgets

    2025-08-27 来自 福建

    1
  • 但是#define有个缺点,你没点出来,我给你看一段代码你就知道了
    以下是A37.[CSP-J 2020] 方格取数我刚开始的写法

    #include <bits/stdc++.h>
    #define int long long
    using namespace std;
    /*
    三方向路径d解法
    */
    const long long N = 1e3 + 10;
    long long n , m , a[N][N];
    long long up[N];//up[i][j] 从下往上走到i,j途经数之和的max
    long long down[N];
    long long dp[N];
    
    //signed 
    int main( ) {
    	cin >> n >> m;
    	
    	for (int i = 1 ; i <= n ; i++) {
    		for (int j = 1 ; j <= m ; j++) {
    			scanf("%lld" , & a[i][j]);
    		}
    	}
    	dp[1] = a[1][1];
    	
    	for (int i = 2 ; i <= n ; i++) dp[i] = dp[i - 1] + a[i][1];
    	
    	for (int j = 2 ; j < m ; j++) {
    		memset(up , 0 , sizeof up);
    		memset(down , 0 , sizeof down);
    		down[1] = dp[1] + a[1][j];
    		up[n] = dp[n] + a[n][j];
    		for (int i = 2 ; i <= n ; i++) down[i] = max(down[i - 1] , dp[i]) + a[i][j]; 
    		for (int i = n - 1 ; i >= 1 ; i--) up[i] = max(up[i + 1] , dp[i]) + a[i][j];
    		for (int i = 1 ; i <= n ; i++) dp[i] = max(up[i] , down[i]);
    	}
    	dp[1] += a[1][m];
    	for (int i = 2 ; i <= n ; i++) {
    		dp[i] = max(dp[i] , dp[i - 1]) + a[i][m];
    	}
    	cout << dp[n] << endl;
    	return 0;
    }
    

    很明显,你放进编译器会说:天哪,为啥CE了,这就是#define的缺点,int main应写成signed main
    以下是更改代码

    2025-10-01 来自 福建

    0
    • 更改后的代码

      #include <bits/stdc++.h>
      #define int long long
      using namespace std;
      /*
      三方向路径d解法
      */
      const long long N = 1e3 + 10;
      long long n , m , a[N][N];
      long long up[N];//up[i][j] 从下往上走到i,j途经数之和的max
      long long down[N];
      long long dp[N];
      
      signed main( ) {
      	cin >> n >> m;
      	
      	for (int i = 1 ; i <= n ; i++) {
      		for (int j = 1 ; j <= m ; j++) {
      			scanf("%lld" , & a[i][j]);
      		}
      	}
      	dp[1] = a[1][1];
      	
      	for (int i = 2 ; i <= n ; i++) dp[i] = dp[i - 1] + a[i][1];
      	
      	for (int j = 2 ; j < m ; j++) {
      		memset(up , 0 , sizeof up);
      		memset(down , 0 , sizeof down);
      		down[1] = dp[1] + a[1][j];
      		up[n] = dp[n] + a[n][j];
      		for (int i = 2 ; i <= n ; i++) down[i] = max(down[i - 1] , dp[i]) + a[i][j]; 
      		for (int i = n - 1 ; i >= 1 ; i--) up[i] = max(up[i + 1] , dp[i]) + a[i][j];
      		for (int i = 1 ; i <= n ; i++) dp[i] = max(up[i] , down[i]);
      	}
      	dp[1] += a[1][m];
      	for (int i = 2 ; i <= n ; i++) {
      		dp[i] = max(dp[i] , dp[i - 1]) + a[i][m];
      	}
      	cout << dp[n] << endl;
      	return 0;
      }
      
      

      2025-10-01 来自 福建

      0
    • 不是,我也没说不要改啊?

      2025-10-01 来自 浙江

      0
    • 定义方式:数据类型名称 变量名
      举几个栗子:

      int a;
      double b;
      bool c;
      typedef 声明:
      您可以使用 typedef 为一个已有的类型取一个新的名字。下面是使用 typedef 定义一个新类型的语法:
      例如,下面的语句会告诉编译器,LL 是 long long 的另一个名称:
      typedef long long LL;
      那下面的定义就是合法的
      LL a;//定义一个长整型

      #define (与typedef可以说一模一样)声明:
      您可以使用 #define 为一个已有的类型取一个新的名字。下面是使用 define 定义一个新类型的语法:
      例如,下面的语句会告诉编译器,LD 是 long double 的另一个名称:
      #define LD long double
      那下面的定义就是合法的
      LD b;//定义一个长双精度浮点型

      2025-10-01 来自 福建

      0
  • 不喜轻喷

    2025-08-28 来自 浙江

    0
  • 加上#创作计划# 只是想参与一哦

    2025-08-28 来自 浙江

    0
  • 而且第五部分也错了,C++中这个叫数组

    2025-08-27 来自 福建

    0
  • ddd

    2025-08-27 来自 福建

    0
  • 一小部分AI补充

    2025-08-27 来自 浙江

    0

热门讨论