题目:http://codevs.cn/problem/2189/
%100的话就加一维状态。把最优性改为可行性(存在性)。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,a[30][30]; bool d[2][30][105]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) scanf("%d",&a[i][j]); int tp=n%2; for(int i=1;i<=n;i++)d[tp][i][a[n][i]%100]=1; for(int i=n-1;i;i--) { memset(d[i%2],0,sizeof d[i%2]); for(int j=1;j<=i;j++) for(int k=0;k<100;k++)//第i+1行的k d[i%2][j][(k+a[i][j])%100]=d[(i+1)%2][j][k]|d[(i+1)%2][j+1][k]; } for(int k=99;k>=0;k--) if(d[1][1][k]) { printf("%d",k);return 0; } }