poj-3666

【POJ 3666】Making the Grade(简单DP) 首先可以明确一个方面,那就是如果将X改成Y,那么Y肯定是这N个数中的某一个(为什么仔细想想) 之后可以得到一个状态转移那就是dp[i][j]代表已经考虑了i位的情况下,结尾为j的最小更改数。 状态转移为dp[i][j] = min(dp[i-1][k] + abs(a[i] - b[j])) 这样的话可以写出一个初步的代码: #include #include #include using 阅读详情

http://vjudge.net/problem/POJ-3666

 题目是dp 题目;   简单dp 离散一下就好.

我们先来讲一讲不离散的,简单的懂了,其他的也很容易. dp[i] 代表这个数列以i 结尾的最小花费;  假设现在要求 前n个数组成的数列,那么dp[i]= 前 n-1 的 min(dp[i]~dp[0])+ (当前这个数-i);



#include <cstdio>
#include <cstring>
#include <cctype>
#include <cmath>
#include <set>
#include <map>
#include <list>
#include <queue>
#include <deque>
#include <stack>
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <time.h>

using namespace std;
typedef long long LL;
const int INF=0x3f3f3f3f;
const int MOD=1e9+7;
const int MAXSIZE=1e6+5;
const double eps=0.0000000001;
void fre()
{
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
}
#define memst(a,b) memset(a,b,sizeof(a))
#define fr(i,a,n) for(int i=a;i<n;i++)



const int MAXN=2010;
int a[MAXN],index[MAXN];
int dp[MAXN],temp[MAXN];
bool cmp(int x,int y)
{
	return a[x]<a[y];
}
int solve(int n)
{
	for(int i=0;i<n;i++) temp[i]=abs(a[0]-a[index[i]]);
	for(int k=0;k<n-1;k++)
	{
		int minnum=INF;
		for(int i=0;i<n;i++)
		{
			minnum=min(minnum,temp[i]);
			dp[i]=abs(a[k+1]-a[index[i]])+minnum;
		}
		for(int i=0;i<n;i++) temp[i]=dp[i];
	}
    int res=INF;
    for(int i=0;i<n;i++)
    	res=min(res,dp[i]);
    return res;
}
int main(int argc,char *argv[])
{
	int n;
	while(scanf("%d",&n)+1)
	{
		for(int i=0;i<n;i++)
			scanf("%d",&a[i]),index[i]=i;
		sort(index,index+n,cmp);
		printf("%d\n",solve(n));
	}
    return 0;
}

/**************************************************/
/**             Copyright Notice                 **/
/**  writer: wurong                              **/
/**  school: nyist                               **/
/**  blog  : http://blog.youkuaiyun.com/wr_technology  **/
/**************************************************/






Unity镜子效果的实现(无需镜子Shader) Unity镜子效果制作教程 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —— 心分享、心创新!助力快速实现一个简单的镜面反射效果为新手节省宝贵的时间,避免采坑! Chinar 教程效果: 1 Cre... 阅读详情

相关推荐

量化交易新手入门:从零开始搭建你的第一个Python交易策略(附完整代码)

本文为量化交易新手提供从零开始搭建Python双均线策略的完整指南,涵盖环境配置、数据获取、策略实现及风险管理等关键步骤。通过详细的代码示例和实践建议,帮助读者快速掌握量化交易的核心技术,并避免常见陷阱。文章特别强调Python在量化交易中的技术革新优势,适合希望进入金融科技领域的初学者。

weixin_26905487的博客 443

选择法

#include <stdio.h> # define MAXN 10 int main() { int i, index, k, n, temp; int a[MAXN]; scanf("%d", &n); for(i = 0; i < n; i++) { scanf("%d", &a[i]); ...

weixin_45867395的博客 3662

OpenBmc开发2:构建开发环境

编译环境VMware + ubuntu 18.04 编译环境构建:参考OpenBmc开发1:构建开发环境 1、打开一个Ternimal,进入openbmc目录下 2、查看有哪些不同的编译配置 find meta-* -name local.conf.sample 可以看到如下编译配置 3、生成编译配置 插入TEMPLATECONF,上边查询到的配置有很多,但是有一些...

master 2万+

习题7-1 选择法排序 (20分)

习题7-1 选择法排序 (20分 本题要求将给定的n个整数从大到小排序后输出。 输入格式: 输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。 输出格式: 在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。 输入样例: 4 5 1 7 6 输出样例: 7 6 5 1 #include<stdio.h> int main() { int i, index, k, n, temp; int a[10]; scanf("%d", &n); fo

weixin_45863084的博客 374

从零开始学版图(二)-----------差分放大电路

从零开始学版图

m0_56112720的博客 8558

别再手动续期SSL证书了!用acme.sh配合阿里云DNS API,实现全自动HTTPS证书管理

本文详细介绍了如何使用acme.sh配合阿里云DNS API实现SSL/TLS证书的全自动管理,彻底解决手动续期带来的风险与不便。通过自动化部署流程,包括环境准备、API集成、多域名证书申请等关键步骤,帮助运维人员构建高效、可靠的HTTPS证书管理体系,显著提升安全性和运维效率。

weixin_29200485的博客 268

POJ3666

题目来源:http://poj.org/problem?id=3666 题意:给定一个序列,可以对序列的任意一个数进行加减,使之序列成为一个不递增或者不递减的序列,改变数值1就花费价值1,问使之序列成为一个不递增或者不递减的序列最少需要多少价值。 思路:一开始看完题目,想对每个数进行分状态取递增或者递减,当到i时比较之前i-1的数值是多少,但是之前数值可取许多种不同的情况,i也有许多可取的数字...

weixin_43958964的博客 586

软考嵌入式 第五讲 嵌入式Linux系统技术

5.1 inittab配置文件 Linux实时操作系统开机引导时首先启动内核,由内核检查和初始化硬件设备,载入设备的驱动程序模块,安装root文件系统,然后内核将启动一个名为init的进程,它是系统运行的第一个进程,进程号为1。在init运行完成并启动其他必要的后续进程后,系统开始运行,引导过程结束。 在任何时候,可以在文件inittab中添加新的记录项。重新检查inittab文件时,可以通过命令:init q/ Q使init进程立即重新读取并处理文件inittab。 5.1.1 inittab文件记录

Leon的博客 526

POJ 3666 dp

题意 传送门 POJ 3666 基本思路是对 N 个位置枚举所有可能高度,并 dp 求最大值。可能高度取 N 个位置的高度即可,排序以方便顺序 dp。对于升序的情况 dp[i][j]=max{dp[i−1][j′]}+abs(B[j]−A[i]),j′≤jdp[i][j]=max\{dp[i-1][j']\}+abs(B[j]-A[i]),j'\leq jdp[i][j]=max{dp[i−1][...

neweryyy的博客 184

(二)OpenClaw-连接即时通讯平台-集成飞书完整配置指南

本文详细介绍了如何将OpenClaw与飞书机器人对接,实现通过飞书聊天窗口下达指令自动执行任务的高效协作模式。主要内容包括:1)OpenClaw服务部署验证和飞书账号准备;2)在飞书开放平台创建企业自建应用、添加机器人能力、获取凭证和开通必要权限;3)OpenClaw服务端的首次配置,包括设置飞书通道参数和启动长连接。文章提供了完整的操作步骤和截图指引,帮助用户快速完成对接配置,实现AI自动化助手功能。

直到世界的尽头 2246

基于STM32L4XX 、HAL库的ATD5984步进电机驱动器驱动程序应用设计

一、简介: ATD5984是一款内部集成了译码器的微特步进电机 驱动器,能使双极步进电机以全、半、1/4、/1/8、1/16 和1/32步进模式工作。步进模式由逻辑输入管脚MSx选 择。其输出驱动能力达到28V±1.6A。 译码器是ATD5984易于使用的关键,通过STEP管脚 输入一个脉冲就可以使电机完成一次步进,省去了相序 表,高频控制线及复杂的编程接口,使其更适于没有复 杂的微处理器或微处理器负担过重的场合。 在步进操作期间,ATD5984的内部电路可以自动

PP_Cottage的博客 406

POJ 3666(DP)

题目链接:http://poj.org/problem?id=3666   题目大意:给一个串,要求修改最少使得串满足非递增或非递减   题目思路:刚开始没想到,后来经学长提醒如果串里的数字变1000可以怎么做。然后发现可以开dp[i][j][k]暴力,i表示第几位,j表示第几大,k表示是递增还是递减(最后的代码直接两种情况分开来算了),然后转移就是dp[i][j][k]=dp[i-1][...

smilestruggler_Fly To Higher 378

K8s(二十一):在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

🔴 K8s(二十一):在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 3万+

POJ3666 nlogn 做法

呜呜呜我再也不会放弃一个我能理解的题了!就算花几个小时!就算手里还有很多题! 给你一个序列,每次操作你可以让一个数加一或者让一个数减一,问使这个序列不减的最小操作数(具体是啥我也不想看了,大概就是这样,如果是严格递增a[i] - i就变成了不减) 然后有一个结论是改变之后的序列的每个数,一定是原来序列中的某个数。那么离散化之后的n ^2 DP就很显然了 但是!!有一个极其巧妙的nlogn的解...

swunHJ的博客 443

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

poj 3666

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int SIZE = 2010; int a[SIZE], c[SIZE], nums[SIZE]; int f[SIZE][SIZ...

weixin_30443075的博客 67

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

POJ3666 线性dp+维度优化

以下内容部分摘自《算法竞赛进阶指南》(lyd),也有个人的理解

Time Limit Exceeded on test 99 258

poj3666

poj 3666 Making the Grade 题目链接:http://poj.org/problem?id=3666 参考:https://blog.youkuaiyun.com/wuyanyi/article/details/7255154 题意 给定一个序列,以最小代价将其变成单调不增或单调不减序列 问题分析 dp[i][j] := 前i+1个数构成的序列,且序列的最大值为j,dp[i][j]代...

fkuner的博客 349

poj3666(基础dp+离散化)

题目链接:http://poj.org/problem?id=3666Making the GradeTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 9118 Accepted: 4261DescriptionA straight dirt road connects two fields on FJ's farm, but it...

star_moon0309的博客 3150

poj3666(DP+离散化)

题目链接:http://poj.org/problem?id=3666 思路: 看了讨论区说本题的数据比较弱,只需要考虑不减序列即可,比较懒,所以我也只写了这一部分的代码,思路都一样,能AC就行了。 首先要想明白一点,就是将每一个elevation更新后的值一定是原来存在的,因为更新一个elevation最好是与前一个相等,要么与后一个相等,可以从贪心角度去想,这里要先明白,很重要。所以我们...

weixin_33812433的博客 208

POJ3666 Making the Grade

POJ3666 Making the Grade 题意: 给定一个长度为n的序列A,构造一个长度为n的序列B,满足b非严格单调,并且最小化S=∑i=1N|Ai-Bi|,求出这个最小值S,1<=N<=2000,1<=Ai<=1e9. 引理:在满足S最小化的情况下,一定存在一种构造序列B的方案,使得B中的数值都在A中出现过。 由此,用一个数组b[i...

weixin_34163741的博客 176

[POJ 3666]Making the Grade[DP]

题目链接:[POJ 3666]Making the Grade[DP] 题意分析: 含有n个数的序列,允许对序列中的任意一个数加或者减,问:最少更改多少值,使得原序列变成单调递增或者单调递减? 解题思路: 设状态dp[i][j]为到第i个数,以b[j]为结尾更改的最少价值。那么有转移方程dp[i][j]=min(dp[i−1][k])+|a[i]−b[j]|(k=0∼j)dp[i][j] =

闲停 498

POJ 3666 DP

&#13; 链接:&#13; http://poj.org/problem?id=3666&#13; 题意:&#13; 给你一个序列,求使它变成非递增或者非递减所需的最少花费&#13; 把a变成b的花费为|a-b|&#13; 题解:&#13; 事先知道了测试数据都是非递减的,所以就只写了非递减的,其实求非递增在反一下算一遍取最小值就行了&#13; dp[i][j]表示第i个数...

花海 111

动规-POJ-3666

http://poj.org/problem?id=3666 Making the Grade 给定一个正整数数列,要求通过对每一个元素加上或减去任意值,使得数列非严格递增(虽然题设要求还可以非严格递减,但是实际数据只要求非严格递增)。 求所得数列与原数列各个对应元素差的绝对值之和的最小值。 解题报告 思路 由于要求最终改变的绝对值和最小,所以可以知道所得解的数列中元素的最大...

dinghua4921的博客 184
上一篇: HDU-2255(KM算法)
下一篇: 2016-浙江理工新生赛-部分题解
Code--Dream
博客等级 码龄11年 53粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值