uva10154 - Weights and Measure(经典动归)
来源:互联网 发布:aspen plus软件 编辑:程序博客网 时间:2024/05/01 14:10
摞乌龟,,,
每只乌龟给出自身的重量和所能承受的重量,,让求最多摞起来的乌龟个数,,
思路:先将乌龟按照承受力(s[i]-w[i]),从小到大排序,,
然后从上向下计算已经被摞上乌龟的最小重量,,,
对于每个乌龟有两个状态,要或不要。。。
状态:dp[i][j]表示前i只乌龟摞成j层达到的最小重量。。。
状态转移:dp[i][j] = min(dp[i-1][j],dp[i-1][j-1]+w[i]);
代码如下;#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define M 5610#define INF 0x7fffffffint w[M], s[M], r[M], dp[M][M];int comp(const int a, const int b){ return s[a]<s[b]; }int main (){ int n = 1; while(~scanf("%d%d",&w[n],&s[n])) { s[n] = s[n]-w[n]; n++; } n--; for(int i = 0; i <= n; i++) r[i] = i; sort(r+1,r+n+1,comp); for(int i = 0; i <= n; i++) { dp[i][0] = 0; for(int j = 1; j <= n; j++) dp[i][j] = INF; } for(int i = 1; i <= n; i++) for(int j = 1; j <= i; j++) { int x = r[i]; dp[i][j] = dp[i-1][j]; if(s[x]>=dp[i-1][j-1]&&dp[i-1][j-1]!=INF) dp[i][j] = min(dp[i-1][j],dp[i-1][j-1]+w[x]); } int ans; for(int i = n; i >= 1; i--) if(dp[n][i]!=INF) {ans = i; break;} printf("%d\n",ans); return 0;}
- uva10154 - Weights and Measure(经典动归)
- uva10154 - Weights and Measures
- uva10154 - Weights and Measures(01背包)
- uva 10154 - Weights and Measure
- UVA10154:Weights and Measures(类01背包)
- 【动归经典】最长公共子串
- uva10635 - Prince and Princess(巧妙动归)
- Monkey and Banana(动归)
- 动归
- HDU 1081(经典动归,求最大子矩阵)
- uva10154
- 一道动归问题
- 动归_poj2479
- 动归总结
- poj(1260,动归)
- poj2385Apple Catching动归
- poj1463树形动归
- 动归----相似基因
- sqlite 句柄-sqlite 基础教程(3)
- LightOJ 1140 How Many Zeroes?
- SQL 入门
- vim显示行号、语法高亮、自动缩进的设置
- 使用Maven+Svn+Hudson持续集成开发流程实例【搭建二】
- uva10154 - Weights and Measure(经典动归)
- DB2错误信息SQLCODE SQLSTATE (按sqlcode排序)
- service的用法总结(一)
- 使用CImage类 显示图片
- 算法练习
- 好看的xshell配色
- 反射
- Java--Eclipse关联Java源码
- opencv2 第12天复习