博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递推,动态规划(DP),字符串处理,最佳加法表达式
阅读量:6157 次
发布时间:2019-06-21

本文共 1484 字,大约阅读时间需要 4 分钟。

看了一些资料,竟然发现连百度文库也有错误的地方,在这里吐槽一下

题目大意:http://wenku.baidu.com/link?url=DrUNNm19IqpPNZjKPX4Jg6shJiK_Nho6dPf8I0b5unSmQM6Ji7tNTKU1LFWDyiCoJaMj8hHb_AakLqFZFuz0vxwWHiSdTLqn10FsO2tZx6W
上面还有我的评论哦。

解题报告:

1、对于每一节字符串表示的数,用二维数组sum[i][j]记录
2、状态转移方程
f[i][j]=min(f[i-k][j-1]+num[i-k+1][j]);
3、也是吐槽百度文库的地方,一定记得-'0';

 

#include 
#include
#define MAX 105#define INF 0x3f3f3f3fvoid DP(char *a,int t,int m)//t为加号个数,m为字符串长度{ int i,j,d,k,min; int f[m+1][t+1];//f[i][j]表示在前i个字符中插入j个加号所能达到的最小值; int num[m+1][m+1];//二维数组来存每一节数字的大小,num[i][j]表示字符串从i到j的大小; for(i=0; i<=m; i++) { for(j=0,d=0; j<=m; j++) { if(i>j)//不能构成数字 num[i][j]=INF; else { d=d*10+a[j]-'0'; num[i][j]=d; } } } //状态转移方程 //f[m][j]=min(f[m-i][j-1]+num[m-i+1][m]),这里枚举i的位置 for(i=1; i<=m; i++) { for(j=0; j<=t; j++) { if(j>=i) f[i][j]=INF; else if(j==0) f[i][j]=num[0][i-1]; else { for(min=INF,k=1; k
f[i][j]) min=f[i][j]; } f[i][j]=min;//存起来 } } } printf("%d\n",f[m][t]);}int main(){ int times; int len; char arr[MAX]; scanf("%s",arr); scanf("%d",×); len=strlen(arr); DP(arr,times,len); return 0;}

 

转载于:https://www.cnblogs.com/TreeDream/p/5208184.html

你可能感兴趣的文章
活在当下
查看>>
每天进步一点----- MediaPlayer
查看>>
PowerDesigner中CDM和PDM如何定义外键关系
查看>>
跨域-学习笔记
查看>>
the assignment of reading paper
查看>>
android apk 逆向中常用工具一览
查看>>
MyEclipse 报错 Errors running builder 'JavaScript Validator' on project......
查看>>
Skip List——跳表,一个高效的索引技术
查看>>
Yii2单元测试初探
查看>>
五、字典
查看>>
前端js之JavaScript
查看>>
Log4J日志配置详解
查看>>
实验7 BindService模拟通信
查看>>
scanf
查看>>
Socket编程注意接收缓冲区大小
查看>>
SpringMVC初写(五)拦截器
查看>>
检测oracle数据库坏块的方法
查看>>
SQL server 安装教程
查看>>
Linux下ftp和ssh详解
查看>>
跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击
查看>>