这个题也是一个比较简单的背包题,给你2种饮料,每种都有相应的权值, 要求你求出一个方案能够最接近所给的值,否则变会被罚喝酒
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=10001;
const int inf=1<<30;
int n,m,t,dp[maxn],a[2];
int main()
{
while(scanf("%d%d%d",&a[0],&a[1],&t)!=EOF)
{
dp[0]=0;
for(int i=1;i<=t;i++)
dp[i]=-inf;
for(int i=0;i<2;i++)
for(int j=a[i];j<=t;j++)
dp[j]=max(dp[j-a[i]]+1,dp[j]);
int ans=t;
while(dp[ans]<0)
ans--;
if(ans==t)
printf("%d\n",dp[ans]);
else
printf("%d %d\n",dp[ans],t-ans);
}
return 0;
}