由于mod值不好判断大小,
可以直接枚举每一层到每个值的情况。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define maxn 30
int n;
int ans=-1;
bool possible[maxn][maxn][100];// 第i行 第j个 的 可能的%100的数值
int main()
{
memset(possible,false,sizeof(possible));
scanf("%d",&n);
for (int i=1;i<=n;i++)
for (int j=1;j<=i;j++)
{
int num;
scanf("%d",&num);
if(i>1)
{
for(int k=j-1;k<=j;k++)
{
for(int m=0;m<=99;m++)
{
if(possible[i-1][k][m])
{
possible[i][j][(m+num)%100]=1;
}
}
}
}
else
possible[1][1][num%100]=1;
}
for(int i=1;i<=n;i++)
{
for(int j=0;j<=99;j++)
{
if(possible[n][i][j]&& j>ans)
{
ans=j;
}
}
}
printf("%d",ans);
return 0;
}