UVA 10465 Homer Simpson 完全背包

来源:互联网 发布:科威特战争 知乎 编辑:程序博客网 时间:2024/04/29 03:40

自己按照完全背包做的(主要小白放在DP里了,就没多想,,看了别人有贪心,数学方法,,,,,)

#include <map>#include <set>#include <list>#include <cmath>#include<cctype>#include <ctime>#include <deque>#include <stack>#include <queue>#include <cstdio>#include <string>#include <vector>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>#define LL long long#define PI 3.1415926535897932626using namespace std;int gcd(int a, int b){return a % b == 0 ? b : gcd(b, a % b);}#define MAXN 10010int T;int dp[MAXN],sum[MAXN];int weight[4];void slove(){    memset(dp,0,sizeof(dp));    memset(sum,0,sizeof(sum));    for (int i=1;i<=2;i++)     for (int j=weight[i];j<=T;j++)     {        if (sum[j-weight[i]]+weight[i]>sum[j])        {            dp[j]=dp[j-weight[i]]+1;            sum[j]=sum[j-weight[i]]+weight[i];        }        else if (sum[j-weight[i]]+weight[i]==sum[j] && dp[j-weight[i]]+1>dp[j])        dp[j]=dp[j-weight[i]]+1;     }    if (sum[T]!=T) printf("%d %d\n",dp[T],T-sum[T]);    else printf("%d\n",dp[T]);}int main(){    //freopen("sample.txt","r",stdin);    while (scanf("%d%d%d",&weight[1],&weight[2],&T)!=EOF)    {        slove();    }    return 0;}


0 0