hihocoder [Offer收割]编程练习赛18 C 最美和弦(dp)
题目链接:http://hihocoder.com/problemset/problem/1532
题解:一道基础的dp,设dp[i][j][k][l]表示处理到第几个数,当前是哪个和弦错了几次初始x值是多少。这里还要再辅助一个val[k]表示处理到当前情况只错了k次的最小值是多少因为改变的不止是和弦还有初始值,可以看一下代码理解一下。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#define inf 0X3f3f3f3f
using namespace std;
int a[][] , ans[][][] , dp[][][][] , val[];
int getnum(int i , int num , int ext) {
int ans = ;
ans = abs(a[i][] - num) + abs(a[i][] - num - - ext) + abs(a[i][] - num - );
return ans;
}
int main() {
int n , k;
scanf("%d%d" , &n , &k);
for(int i = ; i < n ; i++) {
for(int j = ; j < ; j++) scanf("%d" , &a[i][j]);
}
for(int j = ; j < n ; j++) {
for(int i = - ; i <= ; i++) {
for(int l = ; l <= k ; l++) {
dp[j][][l][i + ] = dp[max(j - , )][][l][i + ] + getnum(j , i , );
if(l) dp[j][][l][i + ] = min(val[l - ] + getnum(j , i , ) , dp[j][][l][i + ]);
dp[j][][l][i + ] = dp[max(j - , )][][l][i + ] + getnum(j , i , );
if(l) dp[j][][l][i + ] = min(val[l - ] + getnum(j , i , ) , dp[j][][l][i + ]);
}
}
memset(val , inf , sizeof(val));
for(int i = - ; i <= ; i++) {
for(int l = ; l <= k ; l++) {
val[l] = min(val[l] , dp[j][][l][i + ]);
val[l] = min(val[l] , dp[j][][l][i + ]);
}
}
}
printf("%d\n" , val[k]);
return ;
}
hihocoder [Offer收割]编程练习赛18 C 最美和弦(dp)的更多相关文章
- hihocoder [Offer收割]编程练习赛4
描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...
- hihocoder [Offer收割]编程练习赛61
[Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...
- ACM学习历程—Hihocoder [Offer收割]编程练习赛1
比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...
- hihocoder offer收割编程练习赛8 C 数组分拆
思路:(引自bfsoyc的回答:http://hihocoder.com/discuss/question/4160) 动态规划.状态dp[i]表示 前i个数的合法的方案数,转移是 dp[i] = s ...
- hihoCoder [Offer收割]编程练习赛3 D子矩阵求和
子矩阵求和 http://hihocoder.com/discuss/question/3005 声明一下: n是和x一起的,m是和y一起的 x是横着的,y是纵着的,x往右为正,y往下为正 (非常反常 ...
- hihocoder [Offer收割]编程练习赛52 D 部门聚会
看了题目的讨论才会做的 首先一点,算每条边(u, v)对于n*(n+1)/2种[l, r]组合的贡献 正着算不如反着算 哪些[l, r]的组合没有包含这条边(u, v)呢 这个很好算 只需要统计u这半 ...
- hihocoder [Offer收割]编程练习赛14
A.小Hi和小Ho的礼物 谜之第1题,明明是第1题AC率比C还要低.题目是求在n个不同重量袋子选4袋,2袋给A,2袋给B,使2人获得重量相同,求问方案数. 我也是一脸懵b...o(n2)暴力枚举发现把 ...
- hihocoder [Offer收割]编程练习赛8
第一次做这种比赛,被自己坑的好惨... A.这道题的关键其实是如果有k和n满足kD+F>nL>kD则不能走无限远,分支看似难整理,其实比较简单,F>L根本就不用算了,明摆着就是Bsi ...
- hihocoder [Offer收割]编程练习赛12 [1495] ---- 矩形分割
原题链接 矩形分割 算法分析: 解决该题要用到"并查集"的思想. 这里有一篇不错的博客介绍并查集: 并查集(Union-Find)算法介绍 记 int total=N*M,这里会有 ...
随机推荐
- Js面向对象构造函数继承
构造函数继承 <!-- 创建构造函数 --> function Animal(){ this.species= '动物'; } function Dog(name,color){ this ...
- MOCTF-MISC-writeup
小菜鸡终于想要开通博客,要开始写东西了.第一次,献给了MOCTF MISC writeup,各种借鉴大哥们的writeup,写的不好的话,算了,后果自负(嘤嘤嘤). MOCTF平台地址:www.moc ...
- L1063 能量项链
1 #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i = a; i <= b ...
- 单元测试python unittest
记录自己学习单元测试框架的一篇博客 菜鸟的学习之路比较艰辛到处找资料一把辛酸泪啊 1.首先是创建一个类里面设计一些简单的函数方便写用例: 原谅我蹩脚的英文直接用拼音命名了 : 2.接着就是创建用例文件 ...
- print('', end='')
print函数的end参数,从python3才开始支持,所以如果要使用这种模式,需要对应使用python3
- 逆向破解之160个CrackMe —— 002-003
CrackMe —— 002 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- mvnjar包冲突解决方法
命令 mvn dependency:tree -Dverbose 结果: [INFO] +- com.esotericsoftware:kryo:jar:4.0.2:test [INFO] | +- ...
- 峰回路转:去掉 DbContextPool 后 Windows 上的 .NET Core 版博客表现出色
今天早上,我们修改了博客程序中的1行代码,将 services.AddDbContextPool 改为 services.AddDbContext ,去掉 DbContextPool . 然后奇迹出现 ...
- size命令的sysv和berkeley格式差别
size命令使用说明 size命令用于显示二进制文件的段(节)大小,其功能类似于readelf -S,详细的说明如下: 用法:size [选项] [文件] 显示二进制文件中节的大小 没有给出输入文件, ...
- python(自用手册)三
第三章 基础 3.1编码初识 ascii 256字母没有中文 一个字节 8位 gbk 中国 中文2字节 16位 英文1字节8位 unicode 万国码 前期 2字节 8位 后期变成4个字节 32位 u ...