1 条题解
-
1
众所周知,一旦 OJ 检测到你在名为 A+B Problem 的题里提交含有
cout<<a+b之类的代码,就会判你 UKE。对于这样一道黑题,我们急需一篇大炮(核弹)轰蚊子的题解。
观察大炮这个词语,注意到它的首字母为 dp,而鱼谷题库中有“动态规划”分类,这启示我们用动态规划解决这道题。 ——改编自洛谷 P1001 的一篇题解。
我们很容易设计本题的状态转移方程:
定义 为 “累加 次 的结果”,通过 递推,最终 即为答案。
按照这个思路,我们就能愉快地拿下 了。#include<bits/stdc++.h> using namespace std; int dp(int a, int b) { int target = a + b; if (target == 0) return 0; unordered_map<int, int> dp; dp[0] = 0; if (target > 0) { // 目标为正数:从0递推到target(每次+1) for (int i = 1; i <= target; ++i) { dp[i] = dp[i - 1] + 1; } } else { // 目标为负数:从0递推到target(每次-1) for (int i = -1; i >= target; --i) { dp[i] = dp[i + 1] - 1; } } return dp[target]; } int main() { int a,b; cin>>a>>b; cout<<dp(a,b); return 0; }我们成功的将一个 的程序优化到了 !!!
思维拓展:尝试以 的做法通过此题!
注:如果有空,还会更新使用图论、C++ 自编 Brainf**k 解释器等方案的题解。
信息
- ID
- 244
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- 递交数
- 17
- 已通过
- 7
- 上传者