三维数组,保存每一种可能的状态
描述
数字三角形
要求走到最后mod 100最大
要求走到最后mod 100最大
输入格式
第1行n,表示n行 <=25
第2到n+1行为每个的权值
第2到n+1行为每个的权值
输出格式
mod 100最大值
测试样例1
输入
2
1
99 98
输出
99
#include <iostream> #include <cstring> using namespace std; const int N = 30, MOD = 100; bool dp[N][N][MOD]; int main() { ios::sync_with_stdio(false); int mp[N][N], n; while(cin >> n) { for (int i = 1; i <= n; ++i) for (int j = 1; j <= i; ++j) cin >> mp[i][j]; memset(dp, 0, sizeof dp); dp[1][1][mp[1][1]] = true; for (int i = 2; i <= n; ++i) { for (int j = 1; j <= i; ++j) { for (int k = 0; k < MOD; ++k) { if(dp[i-1][j][k]) dp[i][j][(k+mp[i][j]) % MOD] = true; else if(dp[i-1][j-1][k]) dp[i][j][(k+mp[i][j]) % MOD] = true; } } } for (int k = MOD - 1; k >= 0; --k) for (int j = 1; j <= n; ++j) if(dp[n][j][k]) { cout << k << endl; j = n, k = 0; } } return 0; }