acdream 1222 Quantization Problem [dp]
称号:acdream 1222 Quantization Problem
题意:给出一个序列 a ,然后给出一个 n * m 的矩阵,让你从这个矩阵中选出一个序列k,使得sum(abs(ki - ai))尽可能的小,首先第一个数仅仅能在矩阵的第一行选第 x 个。然后以后每一个在第 x%n 行选,依次选出最小就可以。
每一个点能够选多次、
分析:这个题目难度在于题意,题意读懂了就简单了。
非常明显的一个dp题目,我们定义状态:dp 【i】【j】 :选第 i 个数 在第 j 列的最小和
则转移方程:dp 【i】【j】 = dp [ i - 1 ] [ k ] + abs ( a [ i ] - mp [ k % s ] [ j ] ) ; k是枚举的前一次在第k行选
然后用一个pre数组保存一下路径就ok
AC代码:
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
const int inf = 0x3f3f3f3f;
const int N = 1200;
const int M = 130;
int dp[N][M];
int mp[M][M];
int pre[N][M];
int a[N];
int main()
{//freopen("Input.txt","r",stdin);int n;int T;scanf("%d",&T);while(T--){scanf("%d",&n);for(int i=0; i<n; i++)scanf("%d",&a[i]);int s,c;scanf("%d%d",&s,&c);for(int i=0; i<s; i++){for(int j=0; j<c; j++)scanf("%d",&mp[i][j]);}memset(dp,inf,sizeof(dp));for(int i=0; i<c; i++){int ff = abs(a[0]-mp[0][i]);dp[0][i]=min(dp[0][i],ff);//printf("%d ",dp[0][i]);}memset(pre,0,sizeof(pre));for(int i=1; i<n; i++){for(int j=0; j<c; j++){for(int k=0; k<c; k++){int ff = dp[i-1][k] + abs(a[i]-mp[k%s][j]); //枚举在全部行取。if(ff<dp[i][j]){dp[i][j]=ff;pre[i][j]=k;}}//printf("%d ",dp[i][j]);}//printf("\n");}int ans = inf, rec;for(int i = 0; i < c; i++){if(dp[n-1][i] < ans){ans = dp[n-1][i];rec = i;}}printf("%d\n", ans);vector<int> res;int i = n-1;while(i != -1){res.push_back(rec);rec = pre[i--][rec];}for(int i = res.size() - 1; 0 <= i; --i){printf("%d%c",res[i],i==0?
'\n':' '); } } return 0; }
版权声明:本文博客原创文章。博客,未经同意,不得转载。
acdream 1222 Quantization Problem [dp]相关推荐
- ASC2 E Quantization Problem DP
题意:太难懂了,最开始给你一个数列 wi ,还有一个转移矩阵 M[m][s], 你最开始只能从 M第一列选一个数 L1,如果选的第K个数,接下来只能从第 k&(m-1)取数, 问你|li- ...
- uva 10401 Injured Queen Problem(dp)
题目链接:10401 - Injured Queen Problem 题目大意:给出一个字符串,要求在n * n(n为字符串的长度)的棋盘上摆放n个受伤的皇后,受伤的皇后只能攻击到同一列和它周围8个格 ...
- bestcoder #56 div 2 B Clarke and problem(dp)
Clarke and problem Accepts: 169 Submissions: 372 Time Limit: 2000/1000 MS (Java/Others) Memory L ...
- poj 3590 The shuffle Problem——DP+置换
题目:http://poj.org/problem?id=3590 bzoj 1025 的弱化版.大概一样的 dp . 输出方案的时候小的环靠前.不用担心 dp 时用 > 还是 >= 来转 ...
- Codeforces 513G1 or 513G2 Inversions problem DP
题目大意: 就是现在初始给定一个n个数的排列, 每次随机地选取任意的一个段的数进行反转, 问k次随机翻转之后逆序对的数量的期望 G1难度题目链接:http://codeforces.com/conte ...
- [CF1153F]Serval and Bonus Problem(dp/积分+OGF)
其实这道题已经在我的学习笔记里面口胡过了- 但由于某种特殊原因-我写了一篇博客. 题面 Getting closer and closer to a mathematician, Serval bec ...
- Light oj 1004 - Monkey Banana Problem(DP)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1004 1004 - Monkey Banana Problem PDF (En ...
- CF1096D Easy Problem(DP)
题意:给出一个字符串,去掉第i位的花费为a[i],求使字符串中子串不含hard的最小代价. 题解:这题的思路还是比较套路的, dp[i][kd]两维,kd=0表示不含d的最小花费,1表示不含rd ...
- [QLU Regular Contest 003] G.Youmu with greedy money problem //dp+滚动数组
题目链接 题意: 给一个初始纯度值 m m m,一共度过 n n n天,给出序列 a [ i ] a[i] a[i]和 b [ i ] b[i] b[i],第 i i i天可以执行下列操作方案之一: ...
最新文章
- Shiro安全框架的使用
- 深入理解input中的value、name、id的区别和用法——Web前端自学笔记
- 可视化webpart基础开发——TreeView控件读取文档库中的所有文件夹和文件(递归方法读取) ....
- 计算机兴趣班记录,计算机兴趣班活动记录.doc
- SQL Server 2005 Express数据库为“只读”
- 负载均衡服务器可以说虚拟机吗,配置网络负载均衡只需十步即可完成
- 仿京东显示隐藏密码明文案例(字体图标实现)
- 微波网络插入反射系数与输入反射系数
- Using OpenCV Java with Eclipse
- B站 汇编语言 视频 教程
- 安卓坐标系转换之二:旋转角(欧拉角)
- 超强!Figma汉化版下载教程来了!
- zblog php换域名,zblog 怎么更换域名
- 三极管和MOS管的使用及区别
- 枪林弹雨 服务器维护中,又维护?
- 中国联通:2018年7月沃指数之移动应用APP排行榜
- 取代李嘉诚成香港新首富,宁德时代曾毓群将面对的是什么?
- 什么是压缩文件/压缩包?
- 横向滚动,overflow-x:auto;失效怎么解决
- 开源丨CloudBase CMS 内容管理系统!简单易用企业内容管理流
热门文章
- nodejs中的fiber(纤程)库详解
- 测试用例设计方法(五)路径覆盖
- Java中创建对象的5种方式 -[转] http://www.codeceo.com/article/5-ways-java-create-object.html...
- Swift学习笔记(8)--函数
- windbg-奔溃生成的dump文件
- 通过自定义ISAPI Filter来禁止敏感文件的访问
- Crystal Reports
- 付费会员制,如何赋能产品?
- 停止对互联网的意淫吧,它不过是个信息技术啊
- 独家发布 | 产品经理生存现状