poj 3666 河南省第七届程序设计D题(山区修路)

题目大意:

给定一个序列,以最小代价将其变成单调不增或单调不减序列,求最小的变动价值;需要用到离散化dp

状态转移方程:

dp[i][j]=abs(j-w[i])+min(dp[i-1][k]);(k<=j)这里的k无需从1遍历到j。

只要在对j进行for循环的时候不断更新一个dp[i-1][j]的最小值mn=min(mn,dp[i-1][j]),

然后对dp[i][j]=abs(j-w[i])+mn即可;

 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<cmath>
 6 using namespace std;
 7 const int N = 550;
 8 const int MAX = 0x3fffffff;
 9 long long dp[N][N];
10 int a[N],b[N],n;
11 int cmp(int x,int y)
12 {
13     if(x>y) return 1;
14     return 0;
15 }
16 long long  solve()
17 {
18     for(int i=1; i<=n; i++)
19     {
20      long long mn = dp[i-1][1];
21        for(int k =1; k<=n; k++)
22       {
23         mn = min(mn,dp[i-1][k]);
24         dp[i][k] = abs(a[i]-b[k])+mn;
25       }
26     }
27       long long ans = dp[n][1];
28       for(int i =1; i<=n; i++)
29       {
30         ans = min(ans,dp[n][i]);
31       }
32       return ans;
33 }
34 int main()
35 {
36     int T;
37     scanf("%d\n",&T);//poj这个地方不是T组数据,需要改动输入
38     while(T--)
39     {
40         scanf("%d",&n);
41         for(int i = 1; i<=n; i++)
42         {
43             scanf("%d",&a[i]);
44             b[i] = a[i];
45         }
46     sort(b+1,b+n+1);
47     long long ans1 = solve();//一次递增序列
48     sort(b+1,b+1+n,cmp);
49     long long ans2 = solve();//一次递减序列求最小值
50     long long ans=min(ans1,ans2);
51     printf("%lld\n",ans);
52     }
53     return 0;
54 }
时间: 2024-08-08 00:33:33

poj 3666 河南省第七届程序设计D题(山区修路)的相关文章

河南省第七届ACM程序设计大赛赛后总结

我们学校ACM集训开始于4月5号(清明节),5月25日在郑州解放军信息工程大学举办,集训耗时50天,但是感觉效果还行,但是也不是太好:我们也已经尽力了,虽然说只拿了个银牌,每份收获的背后,都会有辛勤的汗水,毕竟我们也努力了: 下面说说比赛中的问题:觉得吧,虽说模拟赛参加了很多,但是到了正式的比赛的时候,还是出现了紧张的情况,九点开始比赛,我们AC第一道题的时间是在十点半左右,题目不难而且曾经也做过啊,但是就是调试不好,越调试不好,心里就越急啊:刚开始看题的时间,我们都看了第一道题,意思也都明白,

河南省第七届ACM大赛成绩

本来不想写这篇文章了,但后来想想还是写了:一为纪念我第一次参加这样一个规模宏大的赛事,二为激励自己争取在明年ACM赛场上取得更好地成绩! 注:考试过程不再详细描述! 队名:逐鹿 队员组成: 队长:许长安 队员:李朋飞   张亚威 队员分工: 统筹:许长安 主力:张亚威 翻译:李朋飞 本次比赛,和队长许长安.队友李朋飞在考场配合比较默契,顺利解决了4道题,以30名的成绩取得银奖! 河南省第七届ACM程序设计大赛最终排名 河南省第六届ACM程序设计大赛最终排名 河南省第七届ACM大赛成绩

2014年河南省第七届ACM大赛总结

虽然大赛已经结束了两天,不过比赛的场景还是不断地在眼前回放,一遍遍,这次的比赛给了我很深刻的感悟还有教训. 刚开始比赛选择了贩卖武器那道题,也是全场到最后唯一没有被人做出来的一道题,策略的严重错误,大概耽误了1个多小时. 后面发现了此题的难度,于是换了一道题简单题,不过由于测试数据多了一个空格,一直超时,此刻已经受到了比较大的打击,并且心神开始乱了起来,以至于做第二题的时候 一直明白怎么写,却错了好多次,不能静心分析细节,不过后来由于队友的鼓励重新冷静了下来,情况才得以好转,这使我发现了自己的不

湖南省第七届程序设计竞赛 最优对称路径

http://acm.nyist.net/JudgeOnline/problem.php?pid=564 湖南省第七届大学生计算机程序设计竞赛 题目G 最优对称路径 给一个n行n列的网格,每个格子里有一个1到9的数字.你需要从左上角走到右下角,其中每一步只能往上.下.左.右四个方向之一走到相邻格子,不能斜着走,也不能走出网格,但可以重复经过一个格子.为了美观,你经过的路径还必须关于"左下-右上"这条对角线对称.下图是一个6x6网格上的对称路径. 你的任务是统计所有合法路径中,数字之和最

河南省第七届大学生程序设计竞赛 问题 A: 物资调度【简单dfs】

题目描述 某地区发生了地震,灾区已经非常困难,灾民急需一些帐篷.衣物.食品和血浆等物资.可通往灾区的道路到处都是塌方,70%以上的路面损坏,桥梁全部被毁.国家立即启动应急预案,展开史上最大强度的非作战式的空运行动,准备向灾区投放急需物资.   一方有难,八方支援.现在已知有N个地方分别有A1,A2,….,An个物资可供调配.目前灾区需要物资数量为M. 现在,请你帮忙算一算,总共有多少种物质调度方案.假设某地方一旦被选择调配,则其物资数全部运走. 输入 第一行: K     表示有K组测试数据.

牛客网 哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-低年级组)求最大值

题目描述 给出一个序列,你的任务是求序列中 (a[j]-a[i])/(j-i)[1<=i<j<=n]的最大值 输入描述: 本题包含多组输入,每组输入第一行一个数字n,表示序列的长度.然后接下来一行输入n个数,表示原先序列的样子.数据范围:3<=n<=200000-1000000000<=a[i]<=1000000000 输出描述: 每组数据输出一行一个浮点数,保留两位小数,表示所求的最大值. 示例1 输入 5 2 4 6 8 10 输出 2.00 备注: 输入只有

哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-高年级组)A - 所有情况的和

题目描述 在acimo星球, tabris 是一名勇敢的屠龙勇士,在上绿岛屠龙前决定挑选N种装备武装自己,现在每种装备有两个,**但每种装备tabris必须选择拿一个**,**不能多也不能少**.每件装备有自己的属性值,能给tabris属性加成.对于不同种类的装备之间有叠加效果,如果选择多件装备,最终的属性加成为他们的乘积.若tabris初始属性值为0,最后属性加成的期望是多少. 输入描述: 有多组测试样例,输入到文件结束.每组测试数据的第一行包含一个正整数NN,表示装备的种类数.接下来N行,每

哈尔滨理工大学第七届程序设计竞赛初赛(高年级组)E - 音乐转换

题目描述 John是一位热衷的音游爱好者. 一天,他正在玩音游,碰到了一个难题.他面前有一个初始旋律,游戏目标是要把这一段初始旋律变成目标旋律.但是,难点在于,John并不能随意的改变这一旋律,每一次改变之后的旋律必须在他的旋律库中(或者为目标旋律),更令人头疼的是,每一次操作都需要消耗一定的combo,我们假设从A旋律改变成B旋律,那么这一次操作所消耗的Combo数是A与B的最大子旋律长度(最大公共子序列)再加1.需要注意的是,初始旋律必须变成旋律库中的一个旋律或者直接变成目标旋律,而旋律库中

陕西师范大学第七届程序设计竞赛网络同步赛 J 黑猫的小老弟【数论/法拉数列/欧拉函数】

链接:https://www.nowcoder.com/acm/contest/121/J来源:牛客网 题目描述 大家知道,黑猫有很多的迷弟迷妹,当然也有相亲相爱的基友,这其中就有一些二五仔是黑猫的小老弟.小老弟是如何产生的呢?聪明的iko告诉黑猫,其实是有规律的(她怎么知道???)! 一开始,有两个原始二五仔,代号0/1和1/1, 从原始二五仔到第n代小老弟,每代相邻两个小老弟a/b和c/d,产生一个新的小老弟(a+c)/(b+d),成为下一代新成员.将每一代的小老弟代号约分(包括0/1,1/