UVA 10154 Weights and Measures 01背包

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

题意:给出n只乌龟的体重和能承受的重量,它自己的体重也要承受,要把乌龟们叠起来,问最多能叠到多高。

其实就是变形的01背包,先把乌龟按力量排序,然后再进行01背包。

代码:

/*
*  Author:      illuz <iilluzen[at]gmail.com>
*  Blog:        http://blog.csdn.net/hcbbt
*  File:        uva10154.cpp
*  Create Date: 2013-11-09 11:13:55
*  Descripton:  dp
*/

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

const int MAXN = 6000;
const int MAX = 0x7ffffff;

struct Turtle {
	int wei, stg;
} t[MAXN];

int w, s, n, dp[MAXN];

bool cmp(const Turtle &a, const Turtle &b) {
	if (a.stg != b.stg)
		return a.stg < b.stg;
	return a.wei < b.wei;
}

int main() {
	while (scanf("%d%d", &w, &s) != EOF)
		if (s >= w)
			t[++n].wei = w, t[n].stg = s;

	sort(t + 1, t + n + 1, cmp);
	for (int i = 1; i <= n; i++)
		dp[i] = MAX;

	int ans = (n ? 1 : 0);
	for (int i = 1; i <= n; i++)
		for (int j = n; j >= 1; j--) {
			if (t[i].stg >= dp[j - 1] + t[i].wei)
				dp[j] = min(dp[j], dp[j - 1] + t[i].wei);
			if (dp[j] < MAX)
				ans = max(ans, j);
		}

	printf("%d\n", ans);

	return 0;
}


UVa Problem 10154 Weights and Measures (重量和力量) // Weights and Measures (重量和力量) // PC/UVa IDs: 111103/10154, Popularity: C, Success rate: average Level: 3 // Verdict: Programming Challenges - Solved, UVa - Accepted // Submission Date: 2011-10-12 //... 阅读详情

相关推荐

UVa 10154 - Weights and Measures

题目:有一些乌龟,他们分别有自己的重量和能负担的重量,求能叠在一起的乌龟的最大数量。 分析:dp背包类似物。             状态:设f(i,j)为前i个物品叠成j高度时的最小总重量;             转移:f(i,j)= min(f(i-1,j),f(i-1,j-1)+w(i)) {取后面时,必须能够托起}。 说明:注意输入到EOF后处理。 #include #in

小白菜又菜 1808

UVA 10154 Weights and Measures

做题感悟:这题开始用力量减去自身体重

Muti-Agent 2767

uva 10154 DP 叠乌龟

题意: 给你几只乌龟,每只乌龟有自身的重量和力量。 每只乌龟的力量可以承受自身体重和在其上的几只乌龟的体重和内。 问最多能叠放几只乌龟。 解析: 先将乌龟按力量从小到大排列。 然后dp的时候从前往后叠,状态转移方程: dp[i][j] = dp[i - 1][j]; if (dp[i - 1][j - 1] != inf && dp[i - 1][j

渐近自由 701

uva 10154 Weights and Measures

小乌龟的题。 每个乌龟有自身重量又有可承载的重量 #include #include #include #include using namespace std; const int MAXn = 6000; const int MAX = 0x7ffffff; struct Turtle { int wei,stg; }t[MAXn]; int w,s,n,dp[

论菜鸟的自我修养。。。 376

uva 10154 Weights and Measures(01背包

题目连接:10154 - Weights and Measures 题目大意:有若干只乌龟,每只乌龟有重量和负重两个属性,现在求这若干只乌龟最多可以叠多少层。 解题思路:01背包的变形, 以负重值作为背包的大小, 层数为所求dp值, 每次以min(当前可负重值-乌龟的重量, 乌龟的负重)考虑。 include #include #include using na

不慌不忙、不急不躁 1543

uva10154 - Weights and Measures01背包

题目:uva10154 - Weights and Measures01背包) 题目大意:给出一些乌龟的重量和力量,问怎样将这些乌龟一只放一只背上的堆起来,要求这样序列的乌龟越多越好,并且不要超出每只乌龟的负荷。 解题思路:一开始,以为只要将乌龟的力量从大到小的排下序,然后根据力量找出最长的序列。结果发现这样的做法是不对的,因为这样你就默认了越前面的乌龟就放越底下,(但是其实

628

UVA10154Weights and Measures(类01背包

I know, up on top you are seeing great sights, But down at the bottom, we, too, should have rights. We turtles can't stand it. Our shells will all crack! Besides, we need food. We are starv...

weixin_33696106的博客 172

UVA - 10154 Weights and Measures

#include #include #include using namespace std; struct T { int w; int s; } A[5610]; int cmp (T a, T b) { return a.s < b.s; } int main() { int n, DP[5610], cur; memset(DP, 0x3f3f3f3f, sizeof

Bingo 1786

uva10154 - Weights and Measures

Problem F: Weights and Measures I know, up on top you are seeing great sights, But down at the bottom, we, too, should have rights. We turtles can't stand it. Our shells will all crack! Besides

911

uva 10154(dp)

题意:有一堆海龟要尽可能的叠起来,每个海龟有自己的重量和承重力,每个海龟可以扛起承重力减自身重量大的重量,问海龟最高叠几层。 题解:用一个f[i][j]数组表示有i个海龟可以叠j层的最小总重量,从上往下叠,重量越少叠放的越多,状态转移方程是f[i][j] = max{f[i - 1][j], f[i - 1][j - 1] + turtle[i].w} ,当f[i - 1][j - 1]存在,并

俯瞰风景 708

UVA 10154

题意:有n个乌龟,每个乌龟又一个重量和一个力量,叠罗汉,每个乌龟受重不大于其力量减去自身重量,问最高能叠多少层。   思路:存在一个最优解使得乌龟的力量从上到下是递增的,证明是比较简单的,对于任何一个最优解,假设相邻两层的重量为w[i-1]和w[i],力量为s[i-1]和s[i],并且s[i-1]>s[i],上方的最大重量为s[i]-w[i]-w[i-1],此时交换两个乌龟的位置,则上方最大重量

jinjiahao5299的专栏 587

UVA10154 01背包

题目大意: 给出乌龟的体重和可以承受的重量。 求可以叠起来的最高的乌龟是多少。思路: dp[i][j]表示的是前i只到第j层的最轻的重量。 首先,要按照乌龟的承受重量从小到大排序。 只要,s[i] - w[i] >= dp[i - 1][j - 1] && dp[i -1][ k - 1] !=INF (条件: s[i] - w[i] >= dp[i - 1][j - 1]那么就可以承受

不努力只能看别人脸色。 460

UVA 10154 Weights and Measuresdp

题意:有几只乌龟,每只乌龟有一定的重量与力量。每只乌龟可以背小于它力量的重量(包括它自身的重量)。问最多一共可以有多少只乌龟叠在一起。 解析:dp[i]表示托i个乌龟时的最轻重量,不断的去更新重量使其最小。 这里要先做好预处理,也就是为最长子序列拍好序。 但是按照什么顺序排序呢? 这里要用到一点贪心,我们想如果现在有两个乌龟,一个力气大,一个力气小, 重力我们先不用管,那么应该把

小G的ACM之路 806

UVA-10154 Weights and Measures

I know, up on top you are seeing great sights, But down at the bottom, we, too, should have rights. We turtles can’t stand it. Our shells will all crack! Besides, we need food. We are starving!” groan...

why932346109的博客 209
上一篇: UVA 11137 Ingenuous Cubrency 类似硬币问题的简单dp
下一篇: 计算机网络_学习笔记 第三章 数据链路层
hcbbt
博客等级 码龄14年 1143粉丝 392原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值