闫氏dp分析法yyds~~!
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 110;
int f[N][N];
int n,k;
int main()
{
cin>>n>>k;
memset(f,-0x3f,sizeof f); //初始化为负无穷
f[0][0]=0; //从0件物品中选且总和%k==0的方案中,最大的个数为0
for (int i=1;i<=n;i++)
{
int w;
cin>>w;
for (int j=0;j<k;j++) //%k的取值范围为0~k-1
{
f[i][j]=max(f[i-1][j],f[i-1][((j-w)%k+k)%k]+w);
}
}
cout<<f[n][0]; //最终的答案是从n件物品中选取,且%k==0的方案中总数最大的那个
return 0;
}
求关注