乘积最大——动规不归路

  看着方程写的。不多说什么,慢慢学动规。

 1 #include<cstdio>
 2 #define max(x,y) x>y?x:y
 3 const int N=64;
 4 long long f[N][8],n,k,val[N];
 5 long long cal(int l,int r){
 6     long long res=0;
 7     for(int i=l;i<=r;i++)res=res*10+val[i];
 8     return res;
 9 }
10 int main(){
11     freopen("zenith.txt","r",stdin);
12     scanf("%d %d\n",&n,&k);
13     for(int i=1;i<=n;i++)val[i]=getchar()-‘0‘;
14     for(int i=1;i<=n;i++)f[i][0]=cal(1,i);
15     for(int j=1;j<=k;j++)
16         for(int i=1;i<=n;i++)
17             for(int m=1;m<=i;m++)
18                 f[i][j]=max(f[i][j],f[m][j-1]*cal(m+1,i));
19     printf("%lld\n",f[n][k]);
20     return 0;
21 }

Method_01

  CodeVS 4ms

时间: 2024-08-07 21:17:45

乘积最大——动规不归路的相关文章

ACM/ICPC 之 经典动规(POJ1088-滑雪)

POJ1088-滑雪 将每个滑雪点都看作起点,从最低点开始逐个由四周递推出到达此点的最长路径的长度,由该点记下. 理论上,也可以将每一点都看作终点,由最高点开始计数,有兴趣可以试试. 1 //经典DP-由高向低海拔滑雪-求最长路 2 //Memory:372K Time:32 Ms 3 #include<iostream> 4 #include<cstring> 5 #include<cstdio> 6 #include<algorithm> 7 using

POJ 2955 Brackets (动规)

Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2999   Accepted: 1536 Description We give the following inductive definition of a "regular brackets" sequence: the empty sequence is a regular brackets sequence, if s is a reg

sicily 1091 Maximum Sum (动规)

1 //1091.Maximum Sum 2 //b(i,j) = max{b(i,j-1)+a[j], max(b(i-1,t)+a[j])} (t<j) 3 #include <iostream> 4 using namespace std; 5 6 int main() { 7 int t; 8 cin>>t; 9 while (t--) { 10 int n; 11 cin>>n; 12 int a[n+1]; 13 for (int i = 1; i &

!HDU 1176--DP--(矩阵动规)

题意:有一个数轴,从0到10,小明开始在5这个位置.现在天上开始掉馅饼,小明每次只能移动单位一的长度,求小明最多能接到多少馅饼. 分析:刚开始接触动态规划,还没有真正理解动规的思维,所以刚开始的dp做法不知道对不对但是TLE了.正确的方法是建立一个以时间为行位置为列的矩阵,最初map[i][j]代表的是第i时刻j位置掉的馅饼的数量,状态转移方程:map[i][j]=map[i][j]+max(map[i+1][j-1],map[i+1][j],map[i+1][j+1]).也就是从最底层开始往上

【字符串处理+动规】单词的划分

[字符串处理+动规]单词的划分 Time Limit: 1000MS Memory Limit: 2560KB 有一个很长的由小写字母组成字符串.为了便于对这个字符串进行分析,需要将它划分成若干个部分,每个部分称为一个单词.出于减少分析量的目的,我们希望划分出的单词数越少越好.你就是来完成这一划分工作的. 输入格式 第一行,一个字符串.(字符串的长度不超过100)     第二行一个整数n,表示单词的个数.(n<=100)     第3~n+2行,每行列出一个单词. 输出格式     一个整数,

走入asp.net mvc不归路:[2]控制器概览

asp.net mvc中最灵活的地方就是控制器,这里可以验证数据,可以跳转视图,还可以访问数据库等等.所以,我们要先从这里说起. 1 控制器就是继承了Controller的类,一般来说,类名后面都会增加"Controller"字样,asp.net mvc是一个约定优先的框架,在这里就能看到一点点端倪,接下来还要涉及到其他约定 2 这个控制器里面,有一些方法,其中图示的public并且返回值为ActionResult的方法就是所谓的Action,可以理解为动作.行为.功能等:图示就是登录

走入asp.net mvc不归路:[1]项目文件结构

先来了解一下一个asp.net mvc项目的文件结构. 1 项目文件结构一览 2 mvc,顾名思义,一个项目中最重要的就是这三个东西:M(Model,模型),V(View,视图),C(Controller控制器),其关系一般如下,控制器控制模型和视图,模型传数据给视图: 3 控制器就是控制整个逻辑走向的机制,可以对模型数据进行处理,也可以控制呈现在用户眼前的视图. 4 一般来说,一类的操作会放在同一个控制器中,如账号相关则放于AccountController中,里面有各种Action,即一个一

[ACM] hdu 1231 最大连续子序列 (动规复习)

最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 17687    Accepted Submission(s): 7828 Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j

【线性动规】最大子段和

题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度. 第2行包含N个绝对值不大于10000的整数A[i],描述了这段序列. 输出格式: 输入文件maxsum1.out仅包括1个整数,为最大的子段和是多少.子段的最小长度为1. 输入输出样例 输入样例#1: 7 2 -4 3 -1 2 -4 3 输出样例#1: 4 说明 [样例说明]2 -4 3 -1 2 -4 3 [数据规模与约定] 对于