转移时 k 的范围不对 最大值应为 200 或 j
```cpp
#include <bits/stdc++.h>
#define int long long
using namespace std;
int v[21][201];
int w[21][201];
int dp[201];
int pow(int a,int n)
{
int ans = 1;
for(int i = 1;i <= n;i++)
ans *= a;
return ans;
}
signed main()
{
int n,m;
cin >> n >> m;
memset(dp,0x3f,sizeof(dp));
dp[0] = 0;
for(int i = 1;i <= m;i++)
{
int a,b;
cin >> a >> b;
for(int j = 1;j <= 200;j++)
{
v[i][j] = j;
w[i][j] = a * pow(j,b);
}
}
for(int i = 1;i <= m;i++)
for(int j = n;j;j--)
for(int k = 0;k <= 200;k++)
{
if(j - v[i][k] >= 0)
dp[j] = min(dp[j],dp[j - v[i][k]] + w[i][k]);
}
cout << dp[n];
return 0;
}
by zyh_helen @ 2023-07-29 17:39:08
@[zyh_helen](/user/609439) thx,已关注,已ac
by Zpril_20211017 @ 2023-08-01 09:08:06