http://noi.openjudge.cn/ch0206/2989/statistics/
01背包,不知道为什么RE了一个点以后如果查明原因再改
#include
#include
#include
#include
#define ms(i,j) memset(i, j, sizeof(i));
using namespace std;
int n,k;
int w[105];
int f[1000005];
int main()
{
scanf("%d%d", &n ,&k);
int total = 0;
for (int i=1;i<=n;i++)
{
scanf("%d", &w[i]);
total += w[i];
}
ms(f,0);
int orz = 0;
for (int i=1;i<=n;i++)
{
for (int j=total;j>=w[i];j--)
{
f[j] = max(f[j], f[j-w[i]]+w[i]);
if (f[j]%k==0) orz = max(orz, f[j]);
}
}
printf("%d\n", orz);
return 0;
}