思路:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, m, f[25][205];
struct node
{
ll a, b;
} a[25];
inline ll qpow(ll x, ll y)
{
ll res = 1;
while (y)
{
if (y & 1)
res *= x;
x *= x;
y >>= 1;
}
return res;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
memset(f, 0x3f, sizeof(f));
cin >> n >> m;
for (int i = 1; i <= m; i++)
cin >> a[i].a >> a[i].b;
for (int i = 0; i <= m; i++)
f[i][0] = 0;
for (int i = 1; i <= m; i++)
for (int j = 1; j <= n; j++)
for (int k = 0; k <= j; k++)
f[i][j] = min(f[i][j], f[i - 1][k] + a[i].a * qpow(j - k, a[i].b));
cout << f[m][n];
return 0;
}
注意这一行
for (int i = 0; i <= m; i++)
f[i][0] = 0;
初始化必须让f[0][0]=0,否则30pts