CodeVs 1017 乘积最大(DP)

题目大意:

http://codevs.cn/problem/1017/

题解:

#include <iostream>

using namespace std;

char ch[45];
int n,k;
long long int arr[45][7];
long long int dp[45][7];

int main()
{
    cin >> n >> k >> ch;

    for(int i = 0; i < n; i++){

        int tmp = 0;
        for(int j = i; j < n; j++){

            tmp = tmp * 10 + ch[j]-‘0‘;
            arr[i][j] = tmp;
        }
    }

    //dp 开始
     for(int i = 0; i < n; i++){
        dp[i][0] = arr[0][i];
     }

     for(int i = 0; i < n; i++){

        for(int j = 1; j <= k; j++){

            for(int k = 0; k < i; k++){
                dp[i][j] = max(dp[k][j-1]*arr[k+1][i],dp[i][j]);
            }
        }
     }
     cout << dp[n-1][k] << endl;
    return 0;
}

时间: 2024-11-04 20:05:01

CodeVs 1017 乘积最大(DP)的相关文章

CodeVS 1017 乘积最大

1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加.活动中,主持人给所有参加活动的选手出了这样一道题目: 设有一个长度为N的数字串,要求选手使用K个乘号将它分成K

codevs 1060 搞笑运动会 dp

1060 搞笑世界杯 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://codevs.cn/problem/1060/ Description 随着世界杯小组赛的结束,法国,阿根廷等世界强队都纷纷被淘汰,让人心痛不已. 于是有 人组织了一场搞笑世界杯,将这些被淘汰的强队重新组织起来和世界杯一同比赛.你和你的朋 友欣然去购买球票.不过搞笑世界杯的球票出售方式也很特别,它们只准备了两种球票.A 类 票------免费球票 B 类票-------

CodeVS 1014 装箱问题(DP)

题目大意: http://codevs.cn/problem/1014/ 源码: #include <iostream> #include <cmath> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; int v,n; int arr[50]; int main() { cin >> v >> n; int dp

codevs 1389 乘积平均数

1389 乘积平均数 题目描述 Description 定义 n 个数的乘积平均数为这 n 个数的乘积开 n 次方.给定 n 个正整数,求它们的乘积平均数. 给定n 个正整数,求它们的乘积平均数. 输入描述 Input Description 第一行,一个数 n接下来一行 n 个数,表示给定的 n 个数 输出描述 Output Description 一个实数,表示给定数的乘积平均数,保留2 位小数输出 样例输入 Sample Input 22 8 样例输出 Sample Output 4.00

codevs 1085 数字游戏 dp或者暴搜

1085 数字游戏 2003年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分为m个部分,各部分内的数字相加,相加所得的m个结果对10取模后再相乘,最终得到一个数k.游戏的要求是使你所得的k最大或者最小. 例如,对于下面这圈数字(n=4,m=2):

CodeVS 1031 质数环(DP)

题目大意: http://codevs.cn/problem/1031/ #include <iostream> #include <cmath> #include <algorithm> #include <string> using namespace std; int arr[17] = {0}; bool f[17] = {false}; bool isPrime(int a) { if(a == 0) return false; if(a == 1

访问艺术馆(codevs 1163)树形DP

题目描述 Description 皮尔是一个出了名的盗画者,他经过数月的精心准备,打算到艺术馆盗画.艺术馆的结构,每条走廊要么分叉为二条走廊,要么通向一个展览室.皮尔知道每个展室里藏画的数量,并且他精确地测量了通过每条走廊的时间,由于经验老道,他拿下一副画需要5秒的时间.你的任务是设计一个程序,计算在警察赶来之前(警察到达时皮尔回到了入口也算),他最多能偷到多少幅画. 输入描述 Input Description 第1行是警察赶到得时间,以s为单位.第2行描述了艺术馆得结构,是一串非负整数,成对

codevs 1378选课 树形DP

1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 int N,M,tl[303],tr[303],f[303][303],num[303],con[303]; 6 void insect(int fa,int now) 7 { 8 if (tl[fa]==0) 9 {tl[fa]=now;} 10 else 11 { 12 int i=tl[fa];

二叉苹果树(codevs 5565)树形DP

题目描述 Description 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点)这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1.我们用一根树枝两端连接的结点的编号来描述一根树枝的位置.现在这颗树枝条太多了,需要剪枝.但是一些树枝上长有苹果.       给定需要保留的树枝数量,求出最多能留住多少苹果. 输入描述 Input Description 第1行2个数,N和Q(1<=Q<= N,1<N<=100).N表示树的结点数,Q