博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【动态规划】【记忆化搜索】CODEVS 3415 最小和 CodeVS原创
阅读量:5837 次
发布时间:2019-06-18

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

f(l,r,i)表示第i段截第l位到第r位时,当前已经得到的价格最小值,可以很显然地发现,这个是没有后效性的,因为对之后截得的段都不造成影响。

注意水彩笔数=1的特判。

递归枚举当前段的r求解(∵l是前一段的r+1),因为很多状态重复,所以可以记忆化。

1 #include
2 #include
3 #include
4 using namespace std; 5 int save[9][9][9],m,n,wei,ans=2147483647,len; 6 const int Base[]={
1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000}; 7 int Get_Part(const int &l,const int &r) {
return n%Base[wei-l+1]/Base[wei-r];} 8 int f(int sta,int end,int now) 9 {10 if(save[sta][end][now]!=-1) return save[sta][end][now];11 int res=2147483647;12 if(now==2) res=min(res,Get_Part(sta,end)+f(end+1,wei,now-1));13 else14 for(int i=end+1;i<=wei-(now-2);i++)15 res=min(res,Get_Part(sta,end)+f(end+1,i,now-1));16 return save[sta][end][now]=res;17 }18 int main()19 {20 scanf("%d%d",&n,&m);21 if(m==1)22 {23 printf("%d\n",n);24 return 0;25 } int t=n;26 while(t) {wei++; t/=10;}27 memset(save,-1,sizeof(save));28 for(int i=1;i<=wei-m+1;i++)29 save[wei-i+1][wei][1]=Get_Part(wei-i+1,wei);30 for(int i=1;i<=wei-m+1;i++)31 ans=min(ans,f(1,i,m));32 printf("%d\n",ans);33 return 0;34 }

 

转载于:https://www.cnblogs.com/autsky-jadek/p/4055184.html

你可能感兴趣的文章
【阿里云文档】常用文档整理
查看>>
java中的Volatile关键字
查看>>
前端自定义图标
查看>>
实验二
查看>>
独立开发一个云(PaaS)的核心要素, Go, Go, Go!!!
查看>>
MyBatis使用DEMO及cache的使用心得
查看>>
网站文章如何能自动判定是抄袭?一种算法和实践架构剖析
查看>>
【OpenCV学习】滚动条
查看>>
ofo用科技引领行业进入4.0时代 用户粘性连续8个月远甩摩拜
查看>>
兰州青年志愿者“中西合璧”玩快闪 温暖旅客回家路
查看>>
计划10年建10万廉价屋 新西兰政府:比想象中难
查看>>
甘肃发首版《3D打印职业教育教材》:校企合作育专才
查看>>
李娜入选国际网球名人堂 成亚洲第一人
查看>>
为找好心人抚养孩子 浙江一离婚父亲将幼童丢弃公园
查看>>
晚婚晚育 近20年巴西35岁以上孕妇增加65%
查看>>
读书:为了那个美妙的咔哒声
查看>>
jsp改造之sitemesh注意事项
查看>>
SpringBoot-Shiro使用
查看>>
iOS 9.0之后NSString encode方法替换
查看>>
解决 ThinkPHP5 无法接收 客户端 Post 传递的 Json 参数
查看>>