SPOJ 364 Pocket Money 简单DP
跟矩阵链乘同类型的题……
输出用%llu不是%I64u……
几组数据:
14
1+2*4+3*4+5*0
0*5*6+7*3+2
3+0+6+7+0+4
4*5+7*1*1+1
2*0+3*4*0+5*6+7+8
1+2+3*1+2*1+0
0+2*2+3*0+4
8*9*0+2
2*0+1+0*3
2*0*3+7+1*0*3
1+3*0*5+2
1+1+1+1+1
2*1+1+2*1+2*1+6
1*2*4*0*6*3
- #include <cstdio>
- #include <cstring>
- #include <cstdlib>
- #include <cctype>
- #include <algorithm>
- #define LL unsigned long long int
- using namespace std;
- const int MAXN = ;
- int cntNum, cntOp;
- char str[MAXN];
- char op[MAXN];
- LL num[MAXN];
- bool vis[MAXN][MAXN];
- LL dpMax[MAXN][MAXN];
- LL dpMin[MAXN][MAXN];
- void show()
- {
- printf("All nums: \n");
- for ( int i = ; i < cntNum; ++i )
- printf( "%I64d ", num[i] );
- printf("\nAll Ops:\n");
- for ( int i = ; i < cntOp; ++i )
- putchar( op[i] );
- puts("");
- return;
- }
- void chuli()
- {
- cntNum = cntOp = ;
- int len = strlen(str);
- for ( int i = ; i < len; ++i )
- {
- LL tmp = ;
- while ( i < len && isdigit( str[i] ) )
- {
- tmp = tmp * + ( str[i] - '' );
- ++i;
- }
- num[ cntNum++ ] = tmp;
- if ( i < len )
- op[ cntOp++ ] = str[i];
- }
- //show();
- return;
- }
- LL DPMAX( int l, int r )
- {
- LL &res = dpMax[l][r];
- if ( vis[l][r] ) return res;
- vis[l][r] = true;
- if ( l == r ) return res = num[l];
- res = ;
- for ( int k = l; k < r; ++k )
- {
- if ( op[k] == '+' )
- res = max( res, DPMAX( l, k ) + DPMAX( k + , r ) );
- else if ( op[k] == '*' )
- res = max( res, DPMAX( l, k ) * DPMAX( k + , r ) );
- }
- //printf( "dp[%d][%d]=%I64u\n", l, r, res );
- return res;
- }
- LL DPMIN( int l, int r )
- {
- LL &res = dpMin[l][r];
- if ( vis[l][r] ) return res;
- vis[l][r] = true;
- if ( l == r ) return res = num[l];
- bool first = true;
- for ( int k = l; k < r; ++k )
- {
- if ( op[k] == '+' )
- {
- if ( first )
- {
- res = DPMIN( l, k ) + DPMIN( k + , r );
- first = false;
- }
- else
- res = min( res, DPMIN( l, k ) + DPMIN( k + , r ) );
- }
- else if ( op[k] == '*' )
- {
- if ( first )
- {
- res = DPMIN( l, k ) * DPMIN( k + , r );
- first = false;
- }
- else
- res = min( res, DPMIN( l, k ) * DPMIN( k + , r ) );
- }
- }
- //printf( "dp[%d][%d]=%I64u\n", l, r, res );
- return res;
- }
- int main()
- {
- int T;
- scanf( "%d", &T );
- while ( T-- )
- {
- scanf( "%s", str );
- chuli();
- memset( dpMax, , sizeof(dpMax) );
- memset( dpMin, , sizeof(dpMin) );
- memset( vis, false, sizeof(vis) );
- LL maxx = DPMAX( , cntNum - );
- memset( vis, false, sizeof(vis) );
- LL minn = DPMIN( , cntNum - );
- printf( "%llu %llu\n", maxx, minn );
- }
- return ;
- }
SPOJ 364 Pocket Money 简单DP的更多相关文章
- HDU 1087 简单dp,求递增子序列使和最大
Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- Codeforces Round #260 (Div. 1) A. Boredom (简单dp)
题目链接:http://codeforces.com/problemset/problem/455/A 给你n个数,要是其中取一个大小为x的数,那x+1和x-1都不能取了,问你最后取完最大的和是多少. ...
- codeforces Gym 100500H A. Potion of Immortality 简单DP
Problem H. ICPC QuestTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/a ...
- 简单dp --- HDU1248寒冰王座
题目链接 这道题也是简单dp里面的一种经典类型,递推式就是dp[i] = min(dp[i-150], dp[i-200], dp[i-350]) 代码如下: #include<iostream ...
- poj2385 简单DP
J - 简单dp Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:65536KB 64bit ...
- hdu1087 简单DP
I - 简单dp 例题扩展 Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB ...
- poj 1157 LITTLE SHOP_简单dp
题意:给你n种花,m个盆,花盆是有顺序的,每种花只能插一个花盘i,下一种花的只能插i<j的花盘,现在给出价值,求最大价值 简单dp #include <iostream> #incl ...
- hdu 2471 简单DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2571 简单dp, dp[n][m] +=( dp[n-1][m],dp[n][m-1],d[i][k ...
- Codeforces 41D Pawn 简单dp
题目链接:点击打开链接 给定n*m 的矩阵 常数k 以下一个n*m的矩阵,每一个位置由 0-9的一个整数表示 问: 从最后一行開始向上走到第一行使得路径上的和 % (k+1) == 0 每一个格子仅仅 ...
随机推荐
- autofac 的好博文
https://www.cnblogs.com/neverc/p/4914091.html#e https://www.cnblogs.com/stulzq/p/8547839.html
- mysql常用命令添加外键主键约束存储过程索引
数据库连接 mysql -u root -p123456 查看表 show databases 创建数据库设置编码 create table books character set utf8; 创建用 ...
- scrollHeight, scrollTop, clientHeight
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 1.Netty入门
Netty入门 1.Netty介绍 (1)百度百科介绍: Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络 ...
- 修改SecureCRT默认会话字符集
修改SecureCRT默认会话字符集 1.找到SecureCRT配置文件 Default.ini 2.修改Default修改为UTF-8 将S:"Output Transformer Nam ...
- java 基础词汇 必须 第九天
Collection 集合 List 列表集合 Set 不重复集合 Linked 链表 Vector 线程安全集合 Hash 哈希值 tree 树型结构 Map 键值对集合 add 增加 remove ...
- 友盟分享小结 - iOS
因之前都写在了 AppDelegate 类中,看起来过于臃肿,此次基于友盟分享重新进行了一次优化,此次分享内容基于已经成功集成 SDK 后 code 层级部分.注:此次分享基于 SDK 6.9.3,若 ...
- 牛客小白月赛2 D 虚虚实实 【欧拉图】【连通图】
链接:https://www.nowcoder.com/acm/contest/86/D来源:牛客网 题目描述 震为雷,临危不乱,亨通畅达:巽为风,柔顺伸展,厚载万物. 震卦:洊雷,震,君子以恐惧修省 ...
- C#进阶学习笔记(个人整理)
学习笔记 第一章: 一.回顾数组 1.变量 : 只能存储一个数据 2.数组 :存储固定大小的相同类型的数据 3.对象 : 存储多个相同/不同类型的数据 4.集合 : 特殊的容器,存储N个相同/不同类型 ...
- python__系统 : socket_UDP相关
socket.socket() 可以创建一个套接字: from socket import * from threading import Thread udp_socket = None dest_ ...