UVA 10465 Homer Simpson

来源:互联网 发布:dnf辅助网站源码 编辑:程序博客网 时间:2024/05/21 09:20

DP问题。

我当成一个完全背包做的。只有两个物品。

用 is[] 判断是否刚好可以装满,不能装满再倒过去找最大。


#include<cstdio>#include<cstring>#include<string>#include<queue>#include<algorithm>#include<map>#include<stack>#include<iostream>#include<list>#include<set>#include<bitset>#include<vector>#include<cmath>#define INF 0x7fffffff#define eps 1e-8#define LL long long#define PI 3.141592654#define CLR(a,b) memset(a,b,sizeof(a))#define FOR(i,a,b) for(int i=a;i<b;i++)#define FOR_(i,a,b) for(int i=a;i>=b;i--)#define pub push_back#define puf push_front#define pob pop_back#define pof pop_front#define mp make_pair#define ft first#define sd second#define sf scanf#define pf printf#define sz(v) ((int)(v).size())#define all(v) (v).begin(),(v).end()#define acfun std::ios::sync_with_stdio(false)#define SIZE 10000 +1using namespace std;int main(){    int cost[2],dp[SIZE],n;    bool is[SIZE];    while(~sf("%d%d%d",&cost[0],&cost[1],&n))    {        CLR(dp,0);        CLR(is,0);        is[0]=1;        FOR(i,0,2)        {            FOR(j,cost[i],SIZE)            {                if(is[j-cost[i]])                {                    is[j]=1;                    dp[j]=max(dp[j],dp[j-cost[i]]+1);                }            }        }//        FOR(i,0,n+1)//        pf("%d : is %d,dp %d\n",i,is[i],dp[i]);        if(is[n])            pf("%d\n",dp[n]);        else            {                int i=n;                while(!is[i])i--;                pf("%d %d\n",dp[i],n-i);            }    }}


0 0
原创粉丝点击