完全背包问题,在没装满的情况下需要输出最少所剩时间,从后往前遍历到第一个答案即可
#include<stdio.h>
#include<string.h>
#define INF 0x7fffffff
#define MAXN 10005
int dp[MAXN];
int max(int a,int b) {return a>b?a:b;}
int main()
{
int cost[2],t;
while(scanf("%d%d%d",&cost[0],&cost[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=cost[i];j<=t;j++)
dp[j]=max(dp[j],dp[j-cost[i]]+1);
if(dp[t]>0) printf("%d\n",dp[t]);
else
{
int rest=0;
for(int i=t;i>=0;i--)
{
if(dp[i]>=0)
{
printf("%d %d\n",dp[i],rest);
break;
}
else rest++;
}
}
}
return 0;
}