CDOJ 31 饭卡(card) 解题报告

题目链接:http://acm.uestc.edu.cn/#/problem/show/31

01背包一眼题,没什么好解释……

背包容量是m-5,留下一个最贵不要在01背包里算,最后买。

没错我需要<algorithm>

#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;

int n, m, p[1005];
int opt[1005];

int nextInt() {
	char c; while ((c = getchar()) < ‘0‘ || c > ‘9‘); int r = c - ‘0‘;
	while ((c = getchar()) >= ‘0‘ && c <= ‘9‘) (r *= 10) += c - ‘0‘;
	return r;
}

int main() {
	while (n = nextInt()) {
		memset(opt, 0, sizeof opt);
		for (int i = 1; i <= n; ++i)
			p[i] = nextInt();
		sort(p + 1, p + n + 1);
		m = nextInt();
		for (int i = 1; i < n; ++i)
			for (int j = m - 5; j >= p[i]; --j)
				if (opt[j - p[i]] + p[i] > opt[j])
					opt[j] = opt[j - p[i]] + p[i];
		if (m < 5) printf("%d\n", m);
		else printf("%d\n", m - opt[m - 5] - p[n]);
	}
	return 0;
}
时间: 2024-12-09 09:46:33

CDOJ 31 饭卡(card) 解题报告的相关文章

cdoj 31 饭卡(card) 01背包

饭卡(card) Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/31 Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够).所以大家都希望尽量使卡上的余额最少. 某天,食堂中有n种菜出售,每种菜可购买一次.已知每种

UESTC 31 饭卡(Card) --背包问题

背包问题. 思路:如果m<5,此时也不能消费,所以此时答案为m m>=5: 求出背包容量为m-5,买前n-1样便宜的菜(排个序)的最大价值(即最大消费,即消费完后剩余值最接近5)最后减去最大的那个菜的价格,就得到最小的余额. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using n

UESTC 31 饭卡 card

dp,答案容易想到是 凑出价格总和≤m-5 + 没被使用的最大价格. dp[i = 前i种价格][j = 价格总和] = 最大没使用的价格下标idx_m. dp[i-1][j]存在的话,则只要更新idx_m. 如果dp[i-1][j-c[i]]存在但是dp[i-1][j]不存在,那么c[i]必须使用,idx不变. 把价格从小到大排序更容易写. /** alfs x kayi */ #include<bits/stdc++.h> using namespace std; typedef long

CDOJ 26 遮挡判断(shadow) 解题报告

题目链接http://acm.uestc.edu.cn/#/problem/show/26 出题目的给我说清东边是哪一边啊魂淡! 分析样例可得,东边是先读入数据的那一边. 这题主要考察排序,然而感谢上苍我有<algorithm> 另外,CDOJ是可以用C++11标准的匿名函数的,所以sort的比较函数我就打了匿名的 这题只要记录一下扫到的柱子中投影最西边最靠西的那根,不妨设为柱子h 如果这根柱子h能完全遮住当前扫到的柱子i,那么柱子h仍然是影子最靠西的柱子 如果这根柱子h不能完全遮住当前扫到的

CDOJ 27 棒球防守(baseball) 解题报告

题目链接http://acm.uestc.edu.cn/#/problem/show/27 这题是一道数学计算题,比较坑,花了我几天时间 公式推了挺久的,因为看起来麻烦所以放着几天都懒得做...毕竟暑假 题目给的变量名太蛋疼了,我这里作新的约定 防守员的坐标就是\((x_0, y_0)\),速度\(v_0\)滚地球的速度是\(v\),沿x轴分速度为\(v_x\),y轴分速度为\(v_y\)高飞球的落点是\((x,y)\),飞行时间\(t\) 难点在于滚地球,要求是只要某个内场的恰好碰到球或者提前

cdoj31-饭卡(card) (01背包)

http://acm.uestc.edu.cn/#/problem/show/31 饭卡(card) Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够).所以大家都

【解题报告】饭卡

解题报告——饭卡 问题描述 Time Limit: 1000ms Memory Limit: 32768KB 64-bit integer IO format: %I64d      Java class name: Main 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够).所以大家都希望尽量使卡上的余额最少. 某天,食堂中有n种菜出售,每种菜可购买一次

题解报告:hdu 2546 饭卡(01背包)

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

洛谷OJ P1379 八数码难题 解题报告

洛谷OJ P1379 八数码难题 解题报告 by MedalPluS 题目描述   在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变.   输入格式   输入初试状态,一行九个数字,空格用0表示   输出格式 只有一行,该行只有一个数字,表示从初始状态到