【题解】代金券组合

代金券组合

http://www.nowcoder.com/questionTerminal/5d2405da8d364eafbaca1de9bc2a0d4e

表示实现凑价格 最少需要几张优惠券,那么 就是要求的结果。
对于每张优惠券。都遍历一遍 。看一下加上这张优惠券能不能有更好的效果。

#include<iostream>

using namespace std;

const int INF = 0x3f3f3f3f;
int main()
{
    int P;
    int dp[10010]={0};
    while(cin >> P && P!=0)
    {
        int N;
        cin >> N;
        int v;
        for(int i = 0 ; i <= P ; i++)
        {
            dp[i]=INF;
        }
        for(int i = 0 ; i < N ; i++)
        {
            cin >>v;
            dp[v] = 1;//有价值为v的优惠券,那么v的价格就可以用一张优惠券拼成 这个一定是最优的方案
            for(int i = v+1 ; i <= P ; i++)
            {
                if(dp[i-v]!=INF)//如果i-v有方案那说明i的价格可以从i-v加一张价值为v的优惠券拼成
                {
                    dp[i]=min(dp[i],dp[i-v]+1); //看一下可不可以更优
                }
            }
        }
        if(dp[P]==INF)
        {
            cout<<"Impossible"<<endl;
        }
        else{
            cout<<dp[P]<<endl;
        }
    }
    return 0;
}
全部评论

相关推荐

程序员猪皮:看不到八股什么意思
点赞 评论 收藏
分享
有工作后先养猫:太好了,是超时空战警,我们有救了😋
点赞 评论 收藏
分享
6 收藏 评论
分享
牛客网
牛客企业服务