糖果

解题思路可参考 判断整除

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 const int N=105;
 6 int f[N][N];
 7 
 8 int main(){
 9     int n,k,t;
10     cin>>n>>k;
11     for(int i=1;i<=n;i++){
12         scanf("%d",&t);
13         f[i][t%k]=t;//仅选择第i个糖果
14         for(int j=0;j<k;j++)
15             if(f[i-1][j])
16                 f[i][(j+t)%k]=t+f[i-1][j];
17         for(int j=0;j<k;j++)
18             f[i][j]=max(f[i][j],f[i-1][j]);
19     }
20     cout<<f[n][0];
21     return 0;
22 }