#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<cstring>
#include<queue>
#include<map>
#include<algorithm>
using namespace std;
typedef long long LL;
#define int LL
int read(void){
int s = 0, f = 1;
char c = getchar();
while(!isdigit(c)){
if(c == '-') f = -1; c = getchar();
}
while(isdigit(c)) {
s = s * 10 + c - 48; c = getchar();
}
return s * f;
}
const int InF = 0x3f3f3f3f;
int n, m;
int a[205], b[205];
int dp[25][205], p[205][205];
signed main(void) {
memset(dp, 0x3f3f3f3f, sizeof dp);
n = read(), m = read();
for(int i = 1; i <= m; ++i) a[i] = read(), b[i] = read();
for(int i = 0; i <= m; ++i) dp[i][0] = 0;
for(int i = 1; i <= n; ++i) {
for(int j = 0; j <= m; ++j) {
if(j == 0) p[i][j] = 1;
else p[i][j] = p[i][j-1] * i;
}
}
for(int i = 1; i <= m; ++i) {
for(int j = 0; j <= n; ++j) {
for(int k = 0; k <= j; ++k) {
dp[i][j] = min(dp[i][j], dp[i-1][j-k] + a[i] * p[k][b[i]]);
}
}
}
cout << dp[m][n] << endl;
return 0;
}
错误:
input:
10 3
86 5
26 5
33 3
output:
正确:10712
错误:0