称号: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]相关推荐

  1. ASC2 E Quantization Problem DP

    题意:太难懂了,最开始给你一个数列 wi   ,还有一个转移矩阵 M[m][s], 你最开始只能从 M第一列选一个数 L1,如果选的第K个数,接下来只能从第 k&(m-1)取数, 问你|li- ...

  2. uva 10401 Injured Queen Problem(dp)

    题目链接:10401 - Injured Queen Problem 题目大意:给出一个字符串,要求在n * n(n为字符串的长度)的棋盘上摆放n个受伤的皇后,受伤的皇后只能攻击到同一列和它周围8个格 ...

  3. 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 ...

  4. poj 3590 The shuffle Problem——DP+置换

    题目:http://poj.org/problem?id=3590 bzoj 1025 的弱化版.大概一样的 dp . 输出方案的时候小的环靠前.不用担心 dp 时用 > 还是 >= 来转 ...

  5. Codeforces 513G1 or 513G2 Inversions problem DP

    题目大意: 就是现在初始给定一个n个数的排列, 每次随机地选取任意的一个段的数进行反转, 问k次随机翻转之后逆序对的数量的期望 G1难度题目链接:http://codeforces.com/conte ...

  6. [CF1153F]Serval and Bonus Problem(dp/积分+OGF)

    其实这道题已经在我的学习笔记里面口胡过了- 但由于某种特殊原因-我写了一篇博客. 题面 Getting closer and closer to a mathematician, Serval bec ...

  7. Light oj 1004 - Monkey Banana Problem(DP)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1004 1004 - Monkey Banana Problem     PDF (En ...

  8. CF1096D Easy Problem(DP)

    题意:给出一个字符串,去掉第i位的花费为a[i],求使字符串中子串不含hard的最小代价. 题解:这题的思路还是比较套路的,    dp[i][kd]两维,kd=0表示不含d的最小花费,1表示不含rd ...

  9. [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天可以执行下列操作方案之一: ...

最新文章

  1. Shiro安全框架的使用
  2. 深入理解input中的value、name、id的区别和用法——Web前端自学笔记
  3. 可视化webpart基础开发——TreeView控件读取文档库中的所有文件夹和文件(递归方法读取) ....
  4. 计算机兴趣班记录,计算机兴趣班活动记录.doc
  5. SQL Server 2005 Express数据库为“只读”
  6. 负载均衡服务器可以说虚拟机吗,配置网络负载均衡只需十步即可完成
  7. 仿京东显示隐藏密码明文案例(字体图标实现)
  8. 微波网络插入反射系数与输入反射系数
  9. Using OpenCV Java with Eclipse
  10. B站 汇编语言 视频 教程
  11. 安卓坐标系转换之二:旋转角(欧拉角)
  12. 超强!Figma汉化版下载教程来了!
  13. zblog php换域名,zblog 怎么更换域名
  14. 三极管和MOS管的使用及区别
  15. 枪林弹雨 服务器维护中,又维护?
  16. 中国联通:2018年7月沃指数之移动应用APP排行榜
  17. 取代李嘉诚成香港新首富,宁德时代曾毓群将面对的是什么?
  18. 什么是压缩文件/压缩包?
  19. 横向滚动,overflow-x:auto;失效怎么解决
  20. 开源丨CloudBase CMS 内容管理系统!简单易用企业内容管理流

热门文章

  1. nodejs中的fiber(纤程)库详解
  2. 测试用例设计方法(五)路径覆盖
  3. Java中创建对象的5种方式 -[转] http://www.codeceo.com/article/5-ways-java-create-object.html...
  4. Swift学习笔记(8)--函数
  5. windbg-奔溃生成的dump文件
  6. 通过自定义ISAPI Filter来禁止敏感文件的访问
  7. Crystal Reports
  8. 付费会员制,如何赋能产品?
  9. 停止对互联网的意淫吧,它不过是个信息技术啊
  10. 独家发布 | 产品经理生存现状