1 solutions

  • 0
    @ 2021-10-13 21:15:33

    1017 Buy Fish 官方题解

    题目回顾

    Kirk 有一个”理想“(并没有), 就是以后能有一个属于自己水族馆。无奈啥啥都要钱,这让 Kirk 很烦恼,经过一大波的规划后,买了一大堆水族馆的设备,现在就差鱼还没有买了。可怜的Kirk兜里只剩下为数不多的 money,为了尽可能地让 Kirk 开心你能为 Kirk 制定一个卖鱼的方案,使得 cute 值拉满吗? 市场上的鱼有很多种,每种鱼有不同的价格(price)和可爱程度(cute)。

    题目分析

    本题的目的是在给定的money有限的情况下,去买不同种类不同价格的鱼,不同种类的鱼有一个不同的cute值。看到这里,很容易去使用贪心算法,算每种鱼单价下的cute,据此来选择。实际上贪心算法确实可以解出,但是存在一定的局限性。这里就使用动态规划中的背包算法来解决问题。对于不同的鱼我们可以重复购买,并不是单一的选或者不选择,但是也没有限定每种鱼可以购买的数量,所以可以得出这是一个完全背包的问题。想到使用完全背包此题基本已经解决。

    可行代码

    代码仅供参考

    #include <iostream>
    using namespace std;
    int main(){
    	int money, kinds;
    	cin >> money >> kinds;
    	int price[kinds+5], cute[kinds + 5];
    	for(int i = 1; i <= kinds; i++)
    		cin >> price[i] >> cute[i];
    	int dp[money + 5] = {0};
    	for(int i = 1; i <= kinds; i++)
    		for(int j = price[i]; j <= money; j++)
    				dp[j] = max(dp[j], dp[j - price[i]] + cute[i]);
    	cout << dp[money];
    	return 0;
    }
    

    END 祝大家学习愉快

    • 1

    Information

    ID
    18
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    10
    Tags
    # Submissions
    2
    Accepted
    2
    Uploaded By