编辑代码

#include <stdio.h>  
  
int max(int a, int b) {  
    return (a > b) ? a : b;  
}  
  
int maxCoinCollection(int coins[], int n) {  
    if (n <= 0) return 0;  
      
    int dp[n+1][n+1]; // 创建一个三维数组来存储状态  
    int i, j, k;  
  
    // 初始化第一列,表示收集0个硬币的情况  
    for (i = 0; i <= n; i++) {  
        dp[i][0] = 0;  
    }  
  
    // 初始化第一行,表示不收集任何硬币的情况  
    for (j = 1; j <= n; j++) {  
        dp[0][j] = coins[j-1];  
    }  
  
    // 填充剩余部分  
    for (i = 1; i <= n; i++) {  
        for (j = 1; j <= n; j++) {  
            dp[i][j] = max(dp[i-1][j-1], dp[i-1][j] + coins[i-1]); // 选择收集第i个硬币或不收集第i个硬币中的较大值  
        }  
    }  
  
    return dp[n][n]; // 返回最大硬币收集值  
}  
  
int main() {  
    int coins[] = {1, 2, 3, 4, 5, 6};  
    int n = sizeof(coins) / sizeof(coins[0]);  
  
    printf("%d\n", maxCoinCollection(coins, n));  
  
    return 0;  
}