时间限制: 1 s
空间限制: 32000 KB
题目等级 : 黄金 Gold
题目描述 Description
数字三角形 要求走到最后mod 100最大
输入描述 Input Description
第1行n,表示n行 第2到n+1行为每个的权值
输出描述 Output Description
mod 100最大值
样例输入 Sample Input
2 1 99 98
样例输出 Sample Output
99
数据范围及提示 Data Size & Hint
n<=25
最后一维记录这个数%p可不可能到达
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 using namespace std;
5 const int MAXN=26;
6 int n;
7 int a[MAXN][MAXN];
8 bool f[MAXN][MAXN][101];
9 int main()
10 {
11 scanf("%d",&n);
12 for(int i=1;i<=n;i++)
13 for(int j=1;j<=i;j++)
14 cin>>a[i][j];
15
16 for(int i=1;i<=n;i++)f[n][i][a[n][i]%100]=1;
17
18 for(int i=n-1;i>=1;i--)
19 for(int j=1;j<=i;j++)
20 for(int k=0;k<=99;k++)
21 f[i][j][k]=f[i+1][j][(k-a[i][j]+100)%100]||f[i+1][j+1][(k-a[i][j]+100)%100];
22
23 for(int k=100;k>=1;k--)
24 if(f[1][1][k]==1){cout<<k;break;}
25 return 0;
26 }