sdut1650I-Keyboard(dp)
题目大意就相当于 跟你一串字符串 让你截成k段 使总体的值最小
想法是递归的 递归太慢 可以转换为递推的
这样就有可以推出状态方程 dp[i][j] = max(dp[i][j],dp[i-1][g]+sum[g+1][j]+sum[1][g]-sum[1][j]); dp[i][j]表示总长度为j第i次截的最小值 后面的sum[i][j]表示的就是从i开始作为第一个到j个的花费 o[i][j]保存路径
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<algorithm>
#include<vector>
#include<cmath>
#define INF 1e10
using namespace std;
char s[],ks[];
#define LL long long
LL dp[][],p[],sum[][];
int o[][],pa[];
int main()
{
//freopen("data1.in","r",stdin);
//freopen("text.out","w",stdout);
int t,k,i,j,l,g,kk=;
cin>>t;
while(t--)
{
memset(sum,,sizeof(sum));
kk++;
for(i = ; i < ; i++)
for(j = ; j < ; j++)
dp[i][j] = INF;
cin>>k>>l;
cin>>ks;
cin>>s;
for(i = ; i <= l ; i++)
cin>>p[i];
for(i = ; i <= l ; i++)
{
for(j = i; j <= l ; j++)
sum[i][j] = sum[i][j-]+p[j]*(j-i+);
}
for(i = ;i <= k- ; i++)
for(j = l ; j >= ; j--)
for(g = ; g < j ; g++)
{
if(dp[i][j]>dp[i-][g]+sum[][g]+sum[g+][j]-sum[][j])
{
dp[i][j] = dp[i-][g]+sum[][g]+sum[g+][j]-sum[][j];
o[i][j] = g;
}
}
int x = k-,y = l;
g = ;
while(x)
{
pa[++g] = o[x][y];
x--;y = pa[g];
}
printf("Keypad #%d:\n",kk);
pa[g+] = ;
for(i = g ;i >= ;i--)
{
printf("%c: ",ks[k-i-]);
for(j =pa[i+]+; j <= pa[i] ; j++)
{
printf("%c",s[j-]);
}
puts("");
}
printf("%c: ",ks[k-]);
for(j = pa[]+; j <= l ; j++)
printf("%c",s[j-]);
puts("");
puts("");
}
return ;
} /**************************************
Problem id : SDUT OJ 1650
User name : shang
Result : Accepted
Take Memory : 688K
Take Time : 200MS
Submit Time : 2014-02-15 11:17:10
**************************************/
sdut1650I-Keyboard(dp)的更多相关文章
- 【dp】New Keyboard
http://codeforces.com/gym/101397 B dp[i][j][k]: i为前一个行动的状态,0-switch.1-type,j为当前状态layout的编号,k 是已键入的字符 ...
- 【CF1238E】Keyboard Purchase(状压DP,贡献)
题意:有m种小写字符,给定一个长为n的序列,定义编辑距离为序列中相邻两个字母位置差的绝对值之和,其中字母位置是一个1到m的排列 安排一种方案,求编辑距离最小 n<=1e5,m<=20 思路 ...
- CF1238E.Keyboard Purchase 题解 状压/子集划分DP
作者:zifeiy 标签:状压DP,子集划分DP 题目链接:https://codeforces.com/contest/1238/problem/E 题目大意: 给你一个长度为 \(n(n \le ...
- Codeforces1238E. Keyboard Purchase(状压dp + 计算贡献)
题目链接:传送门 思路: 题目中的m为20,而不是26,显然在疯狂暗示要用状压来做. 考虑状压字母集合.如果想要保存字母集合中的各字母的顺序,那就和经典的n!的状态的状压没什么区别了,时间复杂度为O( ...
- USB Keyboard Recorder
catalogue . 引言 . Device Class Definition for Human Interface Devices (HID) . USB HID Report Descript ...
- HDU 3689 Infinite monkey theorem [KMP DP]
Infinite monkey theorem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- [LeetCode] 4 Keys Keyboard 四键的键盘
Imagine you have a special keyboard with the following keys: Key 1: (A): Print one 'A' on screen. Ke ...
- [LeetCode] 2 Keys Keyboard 两键的键盘
Initially on a notepad only one character 'A' is present. You can perform two operations on this not ...
- 关于android屏幕适配的问题(drawable-xxxxxxxx,dp,sp,px等等),偶尔看到了android源代码,关于dpi的区分的值
上一篇博客说了一下.9.png图片http://blog.csdn.net/qq_23195583/article/details/46737419 当然,点九的是指的能够进行拉伸的.那么假设图片不能 ...
- hdu 3689 杭州 10 现场 J - Infinite monkey theorem 概率dp kmp 难度:1
J - Infinite monkey theorem Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d &am ...
随机推荐
- antd 表单验证
antd form 自带方法 /** * 获取 form 自带方法 * getFieldDecorator * getFieldsError * getFieldError * isFieldTou ...
- 在XX公司工作第二天,维护已有代码
根据<C++ More Exception>所述的规则: Rule #1: Never write using-directives in header files. Rule #2: N ...
- Linux文件系统与磁盘管理
Linux文件系统与磁盘管理 有哪些文件系统: FAT:微软在Dos/Windows系列操作系统中共使用的一种文件系统的总称. exFAT(Extended File Allocation ...
- Axure使用笔记
软件设置类 两个矩形的双边框,边框重合: 项目---项目设置---边界对齐---内边界对齐. 自动备份时间设置 文件-自动备份设置-默认15分钟,根据电脑硬件可以调整. Axure 8 可以不用安装 ...
- 2016/05/25 get和post的区别
get是从服务器上获取数据,post是向服务器传送数据. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过HTTP ...
- Django值中间件
1,还是那句话:写代码的逻辑遵循:简洁,重复性高,可维护性高 1.1>中间件:中间件是一种用来处理Django的请求和响应的框架级别的钩子.它是一个轻量,低级别的插件系统,用于在全局范围内改变D ...
- 不同节点 IP 时间同步 分布式时间同步系统的参考时间获取技术分析
linux linux下时间同步的两种方法分享_LINUX_操作系统_脚本之家 http://www.jb51.net/LINUXjishu/73979.html 分布式时间同步系统的参考时间获取技术 ...
- V4L学习
http://blog.csdn.net/wangrunmin/article/details/7764768# http://blog.sina.com.cn/s/blog_a44175a90101 ...
- idea自定义文档注释模板
1.类注释模板 IntelliJ IDE --> Preferences --> Editor --> File and Code Templates --> Includes ...
- SQL语句--常用
一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...