【动态规划】bzoj1575: [Usaco2009 Jan]气象牛Baric
预处理普通动态规划;庆祝1A三连
Description
为了研究农场的气候,Betsy帮助农夫John做了N(1 <= N <= 100)次气压测量并按顺序记录了结果M_1...M_N(1 <= M_i <= 1,000,000). Betsy想找出一部分测量结果来总结整天的气压分布. 她想用K(1 <= K <= N)个数s_j (1 <= s_1 < s_2 < ... < s_K <= N)来概括所有测量结果. 她想限制如下的误差: 对于任何测量结果子集,每一个非此子集中的结果都会产生误差.总误差是所有测量结果的误差之和.更明确第说, 对于每一个和所有s_j都不同的i: * 如果 i 小于 s_1, 误差是: 2 * | M_i - M_(s_1) | * 如果i在s_j和s_(j+1)之间,误差是: | 2 * M_i - Sum(s_j, s_(j+1)) | 注:Sum(x, y) = M_x + M_y; (M_x 和 M_y 之和) * 如果i大于s_K,误差为: 2 * | M_i - M_(s_K) | Besty给了最大允许的误差E (1 <= E <= 1,000,000),找出最小的一部分结果史得误差最多为E.
Input
* 第一行: 两个空格分离的数: N 和 E
* 第2..N+1行: 第i+1行包含一次测量记录:M_i
Output
* 第一行: 两个空格分开的数: 最少能达到误差小于等于E的测量数目和使用那个测量数目能达到的最小误差.
Sample Input
10
3
20
40
输入解释:
Bessie做了4次记录,分别为10,3,20,和40.最大允许误差是20.
Sample Output
HINT
选择第二和第四次测量结果能达到最小误差17. 第一次结果的误差是2*|10-3| = 14; 第三次结果的误差是|2*20 - (3+40)|=3.
题目分析
算是一道有一点复杂的简单动态规划。
题目的子结构稍微需要转化一下,因为不同边界的加权是不一样的,然后就可以预处理乱搞了。
#include<bits/stdc++.h>
const int maxn = ; int n,m[maxn],limit;
int f[maxn][maxn][maxn],s[maxn][maxn],g[maxn],h[maxn][maxn]; int read()
{
char ch = getchar();
int num = ;
bool fl = ;
for (; !isdigit(ch); ch = getchar())
if (ch=='-') fl = ;
for (; isdigit(ch); ch = getchar())
num = (num<<)+(num<<)+ch-;
if (fl) num = -num;
return num;
}
int abs(int x){return x>?x:-x;}
int main()
{
memset(f, 0x3f3f3f3f, sizeof f);
memset(g, 0x3f3f3f3f, sizeof g);
n = read(), limit = read();
for (int i=; i<=n; i++) m[i] = read();
for (int i=; i<=n; i++)
{
if (i)
for (int j=i+; j<=n; j++)
for (int k=i+; k<j; k++)
s[i][j] += abs(*m[k]-m[i]-m[j]);
else
for (int j=; j<=n; j++)
for (int k=; k<j; k++)
s[i][j] += *abs(m[j]-m[k]);
} //checked
for (int i=; i<=n; i++)
for (int j=i+; j<=n; j++)
for (int k=i+; k<j; k++)
h[i][j] += *abs(m[i]-m[k]);
f[][][] = ;
for (int i=; i<n; i++)
for (int j=; j<=i; j++)
for (int k=j; k<=i; k++)
{
int tt = j?(*abs(m[i+]-m[k])):;
f[i+][j+][i+] = std::min(f[i][j][k]+s[k][i+]-h[k][i+], f[i+][j+][i+]);
f[i+][j][k] = std::min(f[i][j][k]+tt, f[i+][j][k]);
}
for (int i=; i<=n; i++)
{
for (int k=i; k<=n; k++)
g[i] = std::min(g[i], f[n][i][k]);
if (g[i] < limit){
printf("%d %d\n",i,g[i]);
return ;
}
}
return ;
}
END
【动态规划】bzoj1575: [Usaco2009 Jan]气象牛Baric的更多相关文章
- bzoj1575 [Usaco2009 Jan]气象牛Baric
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1575 [题解] 动态规划,令f[i,j]表示前i个选了j个,且第i个必选的最小值. 转移就枚 ...
- [BZOJ1575] [Usaco2009 Jan]气象牛Baric(DP)
传送门 DP f[i][j]表示前i个中选j个的最优解 预处理g[i][j]表示选i~j对答案的贡献 那么就可以n^3乱搞了! 注意边界 #include <cstdio> #includ ...
- bzoj:1575: [Usaco2009 Jan]气象牛Baric
Description 为了研究农场的气候,Betsy帮助农夫John做了N(1 <= N <= 100)次气压测量并按顺序记录了结果M_1...M_N(1 <= M_i <= ...
- bzoj 1575: [Usaco2009 Jan]气象牛Baric【dp】
完了不会dp了 设f[i][j]为以i结尾,有j个时的最优值,辅助数组g[i][j]为s选了i和j,i~j中的误差值 转移是f[j][i]=min(f[k][i-1]+g[k][j]) #includ ...
- [usaco jan 09] 气象牛 baric [dp]
题面: 传送门 思路: 题意有点绕,实际上就是给你一个计算规则,让你取最少的元素,通过这个计算方式,得到一个小于指定误差上限的结果 这个规则分为三个部分,这里分别用pre,sum,suf表示 因为给定 ...
- bzoj 1576: [Usaco2009 Jan]安全路经Travel 树链剖分
1576: [Usaco2009 Jan]安全路经Travel Time Limit: 10 Sec Memory Limit: 64 MB Submit: 665 Solved: 227[Sub ...
- 1574: [Usaco2009 Jan]地震损坏Damage
1574: [Usaco2009 Jan]地震损坏Damage Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 425 Solved: 232[Subm ...
- 【BZOJ1576】[Usaco2009 Jan]安全路经Travel 最短路+并查集
[BZOJ1576][Usaco2009 Jan]安全路经Travel Description Input * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, ...
- 【思维题 并查集 图论】bzoj1576: [Usaco2009 Jan]安全路经Travel
有趣的思考题 Description Input * 第一行: 两个空格分开的数, N和M * 第2..M+1行: 三个空格分开的数a_i, b_i,和t_i Output * 第1..N-1行: 第 ...
随机推荐
- .netcore--Controller后台实现企业微信发送消息
一.获得企业微信管理端权限,登录企业企业微信管理端界面,并创建应用,如下图中的[网站消息推送] 二.参见企业微信API文献,根据corpid=ID&corpsecret=SECRET(其中企业 ...
- Java 工程师面试题和笔试题整理(一)
根据自己之前收集的还有一部分自己面试的整理出来,希望能帮到面试的兄弟(2017). 海科融通 笔试题 1.有一个字符串,如果要在其中查找一个子串,都有哪些方式,写出你认为最好的一个. 2.写出线程都有 ...
- A.出题人的RP值
链接:https://ac.nowcoder.com/acm/contest/358/A 题意: 众所周知,每个人都有自己的rp值(是个非负实数),膜别人可以从别人身上吸取rp值. 然而当你膜别人时, ...
- bryce1010专题训练——CDQ分治
Bryce1010模板 CDQ分治 1.与普通分治的区别 普通分治中,每一个子问题只解决它本身(可以说是封闭的) 分治中,对于划分出来的两个子问题,前一个子问题用来解决后一个子问题而不是它本身 2.试 ...
- robot framework 在pycharm中语法无法高亮显示的,显示绿色解决办法(Robot Framework with PyCharm)
Robot Framework with PyCharm up vote1down votefavorite 1 I am totally new to automation and trying t ...
- 关于foreach的一个BUG
foreach用起来比for更方便,但是foreach隐藏的操作,可能带来更多未知的BUG,今天就遇到一个问题.编程环境VS2010 //使用foreach遍历,其中未改变item的值,但是使用了匿名 ...
- E. 打击判定 判断矩形是否相交
有一个很明显的做法就是判断PointInPolygon .枚举第二个矩形的点,是否在第一个矩形内,但是有bug 就是那种第二个矩形很大的那种,所以容易想到又枚举第一个矩形的点,看是否在第二个矩形里. ...
- Python临时笔记
动态语言python的特性 python2 输入一个匿名函数直接执行 # coding=utf-8 def Test(a, b, func): result = func(a, b) return ...
- Nginx pathinfo模式配置
正常配置 location ~ \.php$ { fastcgi_pass ; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $docu ...
- File "<stdin>" , line 1
写了一个hello.py,仅有一句,print 'hello world', 运行 Python hello.py 出错,提示: File "<stdin>" , li ...