【题意】有两种食物(数量无限)是Simpson喜欢的,每种食物都需要一个进食时间,现在他有时间t,

              问能最多吃多少个食物,时间尽量用完,用不完求最小浪费时间情况下的最多能吃的实物数量。

【解题思路】完全背包,除了0之外其他初始化为负无穷大,不断贪心取正值即可。(根据贪心的思想,当前的最优解必定由上一个最优解转移而来,可以用个for循环枚举物品个数,这里由于只有2个,因此直接1个1个枚举也可以,这里才用后者!)

【AC代码】

#include <stdio.h>
using namespace std;
const int maxn = 10010;
const int inf = 100001;
int dp[maxn];

int main()
{
    int m,n,t;
    while(~scanf("%d%d%d",&m,&n,&t))
    {
        for(int i=1; i<=t; i++)dp[i]=-inf;
        dp[0]=0;
        for(int i=m; i<=t; i++)
        {
            if(dp[i]<dp[i-m]+1)
            {
                dp[i] = dp[i-m]+1;
            }
        }
        for(int i=n; i<=t; i++)
        {
            if(dp[i]<dp[i-n]+1)
            {
                dp[i]=dp[i-n]+1;
            }
        }
        int tmp=t;
        while(dp[tmp]<0)tmp--;
        if(t==tmp)
        {
            printf("%d\n",dp[tmp]);
        }
        else
        {
            printf("%d %d\n",dp[tmp],t-tmp);
        }
    }
    return 0;
}