• 题目:奖金


    题目描述

    在获得吞噬比赛的胜利后,主办方居然只给了M(0<=M<=10000)元,一番咒骂后,你为了庆祝一番,决定用这M元买点东西.现在有N(0<n<=5000)个种类的东西让你挑选,每个东西都有一个价格(0<=W<=M)和一个价值(0<=Q<=20000),每种东西都能挑无数个,现在,你的任务是:当这M元恰好花完时,使所挑选的物品价值总和最大

    输入格式

    第一行二个数N,M
    接下来N行每行两个数,分别是价格和价值

    输出格式

    一个数,为当这M元恰好花完时,最大物品价值总和(数据保证存在解)

    题解:————————————————————————————————————————

    DP入门必扫题,但坑爹的是,数据里竟然有负数,试想谁碰到过花了钱买的物品价值会是负的,rqnoj出题人想象力真丰富。

    代码实现:

    #include<iostream>
    #include<cstring>
    using namespace std;
    
    int f[10001],v[5001],w[5001],m,n;
    
    int main()
    {
        int i,j;
        cin>>n>>m;
        
        for(i=1;i<=n;i++)
        cin>>v[i]>>w[i];
        
        for(i=1;i<=m;i++) f[i]=-100000;
        
        for(i=1;i<=n;i++)
        for(j=v[i];j<=m;j++)
        if(f[j]<f[j-v[i]]+w[i])
        f[j]=f[j-v[i]]+w[i];
    
        cout<<f[m]<<endl;
        return 0;
        }
  • 相关阅读:
    变量的创建和初始化
    HDU 1114 Piggy-Bank (dp)
    HDU 1421 搬寝室 (dp)
    HDU 2059 龟兔赛跑 (dp)
    HDU 2571 命运 (dp)
    HDU 1574 RP问题 (dp)
    HDU 2577 How to Type (字符串处理)
    HDU 1422 重温世界杯 (dp)
    HDU 2191 珍惜现在,感恩生活 (dp)
    HH实习 acm算法部 1689
  • 原文地址:https://www.cnblogs.com/noip/p/2324156.html
Copyright © 2020-2023  润新知