上面那道题用c++怎么写
时间: 2023-08-10 11:02:47 浏览: 87
C++友元习题.pdf
同样可以使用动态规划来解决,以下是C++代码实现:
```cpp
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1005, M = 100005;
char a[N];
int n, y;
int dp[N][M];
int main()
{
while (cin >> a >> y)
{
n = strlen(a);
memset(dp, 0x3f, sizeof dp);
for (int j = 0; j < 10 && j <= y; j++)
dp[1][j] = j;
for (int i = 2; i <= n; i++)
for (int j = 0; j <= y; j++)
for (int k = 0; k <= 9; k++)
if (j >= k)
dp[i][j] = min(dp[i][j], dp[i-1][j-k]*10+k);
int ans = dp[n][y] == 0x3f3f3f3f ? -1 : dp[n][y];
cout << ans << endl;
}
return 0;
}
```
这里使用了memset函数将所有状态初始化为正无穷,使用了三重循环进行状态转移。时间复杂度为$O(ny^2)$,可以通过本题。
阅读全文