AcWing 1047. 糖果
原题链接
简单
作者:
哈基咪
,
2020-10-07 18:04:12
,
所有人可见
,
阅读 379
//糖果
#include<iostream>
#include<cstring>
using namespace std;
const int N=105;
int n,k,f[N][N],candy[N];// f为转移方程数组
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%d",&candy[i]);
}
//f[i][j]表示从前i个物品中选,价值总和%k余数为j的方案的最大值,那么f[0][0]为0,但是f[0][1] 以及 往后这一行数组是不合法的,所以需要赋为负无穷
memset(f,-0x3f,sizeof(f));
f[0][0]=0;
for(int i=1;i<=n;i++)
{
for(int j=0;j<k;j++)
{
//j为模k的余数,所以j不可能为k
//由于是求最值,肯定dp方程不是和的形式
f[i][j]=max(f[i][j],f[i-1][j]);
f[i][j]=max(f[i][j],f[i-1][(j+k-candy[i]%k)%k]+candy[i]);
}
}
cout<<f[n][0]<<endl;
return 0;
}
大佬 为什么TLE了