WHU 1538 Stones II 动态规划
赛后写的,动态规划,学长和题解,提供了两种状态设计的思路,都写了下……结果在写第二种的时候,不小心把下标的起点写错了,导致WA了无数发…… 无奈啊……每次都是这种错误……
题意:
大概就是有n块石头,每块石头有两个值ai和bi,其中ai是价值。要求你从中选任意块,获得的价值最大。
但是,每当你选了一块石头,此时没有被你选到得石头的价值都会剪掉这块石头的bi。
思路:
首先,可以证明,如果被选,bi小的肯定被先选。因为,如果某两块石头,bi大的先选了;那么交换这两块石头的选取顺序,可以得到更大的价值。
因此,我们可以把所有的石头按照bi排序。这样子来贪心。
接下来是动态规划:
状态1:dp[i][j]表示 选取到第i个石头,选到的bi总和是j。 这样的话,在选取下一个石头的时候,那个石头的 ai - j 才是它能获得的价值。
这种解法下的代码:
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; const int MAXN = ; struct node {
int a, b;
bool operator < (const node & x) const {
return b < x.b;
}
}a[MAXN]; int n;
int dp[MAXN]; ///dp[i][j] int main() {
#ifdef Phantom01
// freopen("WHU1538.txt", "r", stdin);
#endif // Phantom01 while (scanf("%d", &n)!=EOF) {
if (==n) break; for (int i = ; i < n; i++)
scanf("%d%d", &a[i].a, &a[i].b);
sort(a, a+n);
memset(dp, , sizeof(dp));
for (int i = ; i < n; i++) {
for (int j = MAXN-; j >= ; j--) {
if (a[i].b+j <= )
dp[a[i].b+j] = max(dp[a[i].b+j], dp[j]+a[i].a-j);
else
dp[] = max(dp[], dp[j]+a[i].a-j);
}
}
int ans = ;
for (int i = ; i < MAXN; i++)
ans = max(ans, dp[i]);
printf("%d\n", ans);
} return ;
}
Solution 1
状态2:dp[i][j]表示 选到第i个石头,后面还要选j块石头。 这样子的话,这块石头在整个过程中能够提供的价值是 ai - J * bi
代码:
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; const int MAXN = ; struct node {
int a, b;
bool operator < (const node &x) const {
return b < x.b;
}
}a[MAXN]; int n;
int dp[MAXN]; int main() {
#ifdef Phantom01
freopen("1538_1.in", "r", stdin);
#endif // Phantom01 while (scanf("%d", &n)!=EOF) {
if (==n) break; memset(dp, , sizeof(dp));
for (int i = ; i < n; i++)
scanf("%d%d", &a[i].a, &a[i].b);
sort(a, a+n);
for (int i = ; i < n; i++) {
for (int j = ; j <= n; j++) {
dp[j] = max(dp[j], dp[j+]+a[i].a-j*a[i].b);
}
}
printf("%d\n", dp[]);
} return ;
}
Solution 2
WHU 1538 Stones II 动态规划的更多相关文章
- WOJ 1538 Stones II 转化背包问题
昨天是我负责这个题目的,最后没搞出来,真的给队伍拖后腿了. 当时都推出来了 我假设最后结果是取了m个物品,则我把这个m个物品按取的先后编号为 k1 k2 k3 k4...km 则最终结果就是 (k1. ...
- whu 1538 - B - Stones II 01背包
题目链接: http://acm.whu.edu.cn/land/problem/detail?problem_id=1538 Problem 1538 - B - Stones II Time Li ...
- WOJ 1538 B - Stones II
Problem 1538 - B - Stones IITime Limit: 1000MS Memory Limit: 65536KB Total Submit: 416 Accepted: 63 ...
- Problem 1538 - B - Stones II 贪心+DP
还是给你石头n枚,每一枚石头有两个值a和b,每取一个石头,除了这块石头其余所有的石头的a就都减去这个石头的b,问你取了的石头的a的总和最大可以为多少? 先按B从大到小排序 然后DP: 取的话:dp[i ...
- LEETCODE —— Unique Paths II [动态规划 Dynamic Programming]
唯一路径问题II Unique Paths II Follow up for "Unique Paths": Now consider if some obstacles are ...
- BZOJ 3462 DZY Loves Math II ——动态规划 组合数
好题. 首先发现$p$是互质的数. 然后我们要求$\sum_{i=1}^{k} pi*xi=n$的方案数. 然后由于$p$不相同,可以而$S$比较小,都是$S$的质因数 可以考虑围绕$S$进行动态规划 ...
- WHU 1537 Stones I
题目见: http://acm.whu.edu.cn/land/problem/detail?problem_id=1537 这个题相当无语,学长给的解法是:枚举取的个数k,然后对每个k贪心,取其中的 ...
- 不同路径II --动态规划
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 现在考虑网 ...
- [LeetCode] 198. 打家劫舍II ☆☆☆(动态规划)
描述 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的 ...
随机推荐
- Avalon.js 实现列表
<table border="0" cellpadding="0" cellspacing="0" class="tab1& ...
- Servlet学习(三)——实例:用户登录并记录登陆次数
1.前提:在Mysql数据库下建立数据库web13,在web13下创建一张表user,插入几条数据如下: 2.创建HTML文件,命名为login,作为登录界面(以post方式提交) <!DOCT ...
- iOS Device Types
ios 设备硬件名称对照表 https://support.hockeyapp.net/kb/client-integration-ios-mac-os-x-tvos/ios-device-types ...
- 脚本_实时显示网卡eth0上的数据流量
#!bin/bash#功能:使用死循环,实时显示网卡eth0发送的数据包流量#作者:liusingbonwhile : do echo "本地网卡eth0的数据流量信息如下:&q ...
- json对象与其字符串之间的转换
在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如: JSON字符串:var str1 = '{ &qu ...
- 【BZOJ 1293】[SCOI2009]生日礼物
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然的滑动窗口题. (尺取法 如果l..i这一段已经有k种珍珠了. 那么就尝试把l++; (即把l这个影响尝试去掉一下 如果不足k种 ...
- 【图灵杯 E也即POJ 3368】简单的RMQ
Description 给定一个数组,其中的元素满足非递减顺序.任意给定一个区间[i,j],求其中某个元素重复出现的最大次数. Input 多组数据输入.每组数据的第一行包含两个整数n和q(1< ...
- Linux防火墙iptables安装配置--使用远程工具Xmanager和ftp服务安装配置
一.linux关闭防火墙: a.用户直接在终端输入:service iptables stop 查看防火墙状况:service iptables status b.root用户在终端输 ...
- Maven搭建之后的设置
Maven搭建之后的设置 1,设置环境变量M2_HOME=D:\Java\apache-maven-3.3.9, MAVEN_OPTS=-Xms128m -Xmx512m 在path中,添加D:\Ja ...
- Android 解决TextVIew载入自己定义字体慢的问题
网上非常多自己定义字体样式的代码.都是告诉应该这样做: 在自己定义控件里写,可是这样写有问题,会随着界面里自己定义控件越多.Activity载入速度越慢,太多了easy造成内存泄露问题,由于你没创建一 ...