3.3.7--饭卡--01背包

饭卡

Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 714 Accepted Submission(s): 313
 
Problem Description
电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。
某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。
Input
多组数据。对于每组数据:
第一行为正整数n,表示菜的数量。n<=1000。
第二行包括n个正整数,表示每种菜的价格。价格不超过50。
第三行包括一个正整数m,表示卡上的余额。m<=1000。

n=0表示数据结束。
Output
对于每组输入,输出一行,包含一个整数,表示卡上可能的最小余额。
Sample Input
1
50
5
10
1 2 3 2 1 1 2 3 2 1
50
0
Sample Output
-45
32
解题思路:因为要想钱数更小就要在最后一次买最贵的食物,也就是在买最后一次之前要使钱数尽量接近5元,将问题化为找到用m-5元钱在去掉最贵的食物里找到能花的最大钱数,即背包容量为m-5,物品有n-1种(去掉最贵),这里物品的价值与体积相同,求此背包能装的最大值,求出此值为dp[m-5],用m-dp[m-5]即买最后一次前能达到的最接近5的值,

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
    int n,m,i,j;
    int v[1006];
    int dp[1006];
    while(scanf("%d",&n)&&n)
    {
        for(i=0;i<n;i++)
            scanf("%d",&v[i]);
        scanf("%d",&m);
        if(m<5) {printf("%d\n",m); continue;}
        sort(v,v+n);  //排序后,v[n-1]为最贵食物
        memset(dp,0,sizeof(dp));
        for(i=0;i<n-1;i++)
        {
            for(j=m-5;j>=v[i];j--)
                if(dp[j]<(dp[j-v[i]]+v[i]))
                    dp[j]=dp[j-v[i]]+v[i];
        }
        printf("%d\n",m-dp[m-5]-v[n-1]);
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Ubuntu上安装osqp-eigen库,首先需要安装eigen库。可以从琴郎同学的博客中找到关于在Linux上安装eigen库的教程。另外,你也可以直接从Ubuntu的源码库中下载eigen库的源码并解压缩。安装eigen库后,你可以按照以下步骤安装osqp-eigen库: 1. 打开终端并使用以下命令克隆osqp-eigen库的GitHub仓库: ``` git clone https://github.com/robotology/osqp-eigen.git ``` 2. 进入osqp-eigen目录并创建一个build文件夹: ``` cd osqp-eigen mkdir build && cd build ``` 3. 使用cmake命令生成Makefile: ``` cmake ../ ``` 4. 使用make命令编译osqp-eigen库: ``` make ``` 5. 使用sudo make install命令安装osqp-eigen库。默认情况下,osqp-eigen库将安装在`/usr/local/include`目录中。请注意,这是非apt安装的包,默认情况下不会安装在`/usr/include`目录中。 通过按照以上步骤进行操作,你应该能够成功在Ubuntu上安装osqp-eigen库。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [安装eigen opqp eigen-osqp matplotlib-cpp及使用](https://blog.csdn.net/zk1639712996/article/details/126568314)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [eigen-3.3.7.tar.gz](https://download.csdn.net/download/Mua111/12651226)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [18.04安装osqp-eigen](https://blog.csdn.net/qq_38313901/article/details/119415574)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值