POJ1651 Codevs1017 乘积最大 ---2000年NOIP全国联赛提高组 dp
2016-10-31 19:52
639 查看
POJ1651
Codevs1017 乘积最大 —2000年NOIP全国联赛提高组
预处理出所有数字组合。
dp[i][k] 表示前 i 个数字已经用了 k 个 乘号。
状态转移方程:
第i个数字用了k个乘号的状态 可以从 小于i 的j 用了k-1个乘号的状态转移而来。
Codevs1017 乘积最大 —2000年NOIP全国联赛提高组
预处理出所有数字组合。
dp[i][k] 表示前 i 个数字已经用了 k 个 乘号。
状态转移方程:
dp[i][k] = max(dp[i][k], dp[j][k-1]*mul[j+1][i]);
第i个数字用了k个乘号的状态 可以从 小于i 的j 用了k-1个乘号的状态转移而来。
#include <cstdio> #include <cstring> #include <iostream> #include <cstdlib> using namespace std; #define MAXN (100+10) char s[MAXN]; int mul[MAXN][MAXN], dp[MAXN][MAXN]; int main() { int n, K; cin >> n >> K; scanf("%s", s+1); for(int i = 1; i <= n; i ++) { for(int j = i; j <= n; j ++) { for(int k = i; k <= j; k ++) { mul[i][j] *= 10; mul[i][j] += s[k]-'0'; } } } for(int i = 1; i <= n; i ++) dp[i][0] = mul[1][i]; for(int k = 1; k <= K; k ++) for(int i = k+1; i <= n; i ++) for(int j = k; j < i; j ++) // 因为↓ 所以 j < k 无意义 dp[i][k] = max(dp[i][k], dp[j][k-1]*mul[j+1][i]); cout << dp [K]; return 0; }
相关文章推荐
- Codevs 1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组
- 划分型动态规划 之 CODE[VS] 1017 乘积最大 2000年NOIP全国联赛提高组
- 【动态规划】【记忆化搜索】1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组
- 1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组
- wikioi 1017 乘积最大 (2000年NOIP全国联赛普及组NOIP全国联赛提高组)
- Codevs 3287 货车运输 2013年NOIP全国联赛提高组(带权LCA+并查集+最大生成树)
- 深度优先搜索 之 CODE[VS] 1018 单词接龙 2000年NOIP全国联赛普及组NOIP全国联赛提高组
- Codevs 1169 传纸条/1043 方格取数 2008/2000年NOIP全国联赛提高组 多线程dp
- Codevs 1171 潜伏者 2009年NOIP全国联赛提高组
- 宽度优先搜索 之 CODE[VS] 1099 字串变换 2002年NOIP全国联赛提高组
- 最短路 之 CODE[VS] 1041 Car的旅行路线 2001年NOIP全国联赛提高组
- codevs1017 乘积最大(dp)
- Codevs P1157 2k进制数 2006年NOIP全国联赛提高组
- Codevs 3731 寻找道路 2014年 NOIP全国联赛提高组
- 【日常学习】【划分DP】codevs1017 乘积最大题解
- 【NOIP2000TG/codevs1017】 乘积最大 解题报告
- Code Vs 1169 传纸条 && 2008年NOIP全国联赛提高组
- 【codevs黄金】1098 均分纸牌 2002年NOIP全国联赛提高组
- CODE[VS] 1098 均分纸牌 ( 2002年NOIP全国联赛提高组)
- Codevs 1172 Hankson 的趣味题 2009年NOIP全国联赛提高组