首页 > 其他分享 >饭卡 (01背包)

饭卡 (01背包)

时间:2023-04-20 15:08:30浏览次数:31  
标签:01 饭卡 int max 卡上 背包 余额 include dp


饭卡


Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 16574    Accepted Submission(s): 5763



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


 


//简单的01背包题 
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define max(a,b) (a>b?a:b)
using namespace std;
int a[1050],dp[1050];
int main()
{
    int n,m,num,i,j,maxn;
    while(scanf("%d",&n),n)
    {
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
        sort(a,a+n);
        maxn=a[n-1];
        scanf("%d",&m);
        if(m<5)
        { 
        	printf("%d\n",m);
        	continue;
		}
        else
        {
        	num=m-5;
        	memset(dp,0,sizeof(dp));
        	for(i=0;i<n-1;i++)
        	{
        		for(j=num;j>=a[i];j--)
        		{
        			dp[j]=max(dp[j-a[i]]+a[i],dp[j]);
        		}
        	}
        }
        printf("%d\n",m-dp[num]-maxn);
    }
    return 0;
}


 


 


#include<stdio.h>
#include<string.h>
#define MAX(a,b) (a>b?a:b)
#include<algorithm>
using namespace std;
int a[1010],dp[1010];
int main(){
	int n,m,i,j,num,max;
	while(scanf("%d",&n),n)
	{
		for(i=0;i<n;i++)
			scanf("%d",&a[i]);
		sort(a,a+n);	
		scanf("%d",&m);
		if(m<5)
		{
			printf("%d\n",m);
			continue;
		}
		num=m-5;	
		memset(dp,0,sizeof(dp));
		dp[0]=1;max=0;	
		for(i=0;i<n;i++)
		{
			for(j=num;j>=0;j--)
			{
				if(dp[j])
				{
					dp[j+a[i]]=1;
					max=MAX(max,j+a[i]);
					//if(j+a[i]>max)
					//	max=j+a[i];
				}
			}
		}
		printf("%d\n",m-max);
	}
	return 0;
}



标签:01,饭卡,int,max,卡上,背包,余额,include,dp
From: https://blog.51cto.com/u_16079508/6209563

相关文章

  • 2 01 | 基础架构:一条SQL查询语句是如何执行的?
    你好,我是林晓斌。这是专栏的第一篇文章,我想来跟你聊聊MySQL的基础架构。我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于MySQL的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有......
  • 01-CSS中的非布局样式
    title:01-CSS中的非布局样式publish:true前言CSS中,有很多非布局样式,这些样式(属性)和与布局无关,包括:字体、字重、颜色、大小、行高背景、边框滚动、换行装饰性属性(粗体、斜体、下划线)等。这篇文章,我们来对上面的部分样式做一个回顾。边框如何用边框画一个三角形?详见......
  • 01-认识Web和Web标准
    title:01-认识Web和Web标准publish:trueWeb、网页、浏览器WebWeb(WorldWideWeb)即全球广域网,也称为万维网。我们常说的Web端就是网页端。网页网页是构成网站的基本元素。网页主要由文字、图像和超链接等元素构成。当然,除了这些元素,网页中还可以包含音频、视频以及Flash......
  • P5322 BJOI2019 排兵布阵
    P5322BJOI2019排兵布阵本题主要考察对模型的转化能力。首先要察觉两条性质:对于一个城堡,想打败一个玩家的同时用最少的士兵,肯定是正好派出这个玩家在这个城堡派出的士兵数量的二倍加一名士兵。在一个城堡上,打败了一个在这个城堡派出士兵数量为\(x\)的玩家,就可以顺便打败所......
  • 01-VS Code的使用
    title:01-VSCode的使用前言文章标题:《第一次使用VSCode时你应该知道的一切配置》。本文的最新内容,更新于2021-10-09。大家完全不用担心这篇文章会过时,因为随着VSCode的版本更新和插件更新,本文也会随之更新。本文的最新内容,也会在GitHub上同步更新,欢迎star。VS......
  • 貌似遇到了一个docker 2014年以来就有的大神级大坑,大佬们怎么解决?
    版本centos 3.10.0-1160.53.1.el7.x86_64,华为云服务器。pr1921:48:39k8s-master01kernel:docker0:port1(veth7a384b6)enteredblockingstateApr1921:48:39k8s-master01kernel:docker0:port1(veth7a384b6)entereddisabledstateApr1921:48:39k8s-master......
  • Dynamics CRM - 如何修复安装CRM 2016时出现SQL Native Client 下载失败的问题
    一、问题场景:   近日,为了测试DynamicsCRM8.2到9.17的升级,重装了CRM2016,过程中发现存在SQLNativeClientDownloadFailed导致安装无法继续进行。在此记录一下问题的解决办法:二、查找原因:   a.首先通过访问安装日志目录查看原因,路径为:SystemDrive:\Users\U......
  • 20201302姬正坤《网络对抗技术》Exp5 信息搜集与漏洞扫描
    《网络对抗技术》Exp5信息搜集与漏洞扫描实践目标(1)各种搜索技巧的应用(2)DNSIP注册信息的查询(3)基本的扫描技术:主机发现、端口扫描、OS及服务版本探测、具体服务的查点(以自己主机为目标)(4)漏洞扫描:会扫,会看报告,会查漏洞说明,会修补漏洞(以自己主机为目标)实践步骤一、各种搜索技......
  • 【230419-5】在某种信息传输过程中,用4个数字的一个排列表示1个信息,不同排列表示不同信
    ......
  • P2661 [NOIP2015 提高组] 信息传递-拓扑排序+DFS深度优先遍历
    题目描述有 n 个同学(编号为 1 到 n )正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为 i 的同学的信息传递对象是编号为 Ti​ 的同学。游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信......