#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
bool dp[51*10001];
int main()
{
int n,d,x,cnt=0,sum=0,w=0;
cin>>n>>d;
dp[0]=1;
for(int i=0;i<n;i++)
{
cin>>x;
for(int j=(sum+=x);j>=x;j--)
{
if(dp[j-x]) dp[j]=true;
}
}
while(true)
{
int j=w+d;
while(!dp[j]&&j>w) j--;
if(j==w) break;
w=j;cnt++;
}
cout<<w<<" "<<cnt<<endl;
return 0;
}
CodeForces 364 B. Free Market
最新推荐文章于 2019-07-10 17:44:26 发布
本文介绍了一个关于物品交换的问题——FreeMarket。在这个问题中,John需要通过一系列的交换获得总价值最大的物品集合,并且要满足他的正义感准则。文章详细解释了交换规则,并给出了一种算法实现方案。
1312

被折叠的 条评论
为什么被折叠?



