80分,附一错误点数据,正确答案为2055。
#include<bits/stdc++.h>
using namespace std;
#define rt register int
#define inf 0x3f3f3f3f
struct wen{
int a,b;
}w[25];
int n,m;
long long f[25][205];
long long work(int a,int b,int k){
long long res=1;
while(b){
res*=k;
--b;
}
return res;
}
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
for(rt i=1;i<=m;++i)cin>>w[i].a>>w[i].b;
for(rt i=0;i<=m;++i)
for(rt j=0;j<=n;++j)
f[i][j]=inf;
f[0][0]=0;
for(rt i=1;i<=m;++i)
{
for(rt j=1;j<=n;++j)
{
f[i][j]=min(f[i-1][j],f[i][j]);
for(rt k=0;k<=j;++k){
f[i][j]=min(f[i][j],f[i-1][j-k]+w[i].a*work(w[i].a,w[i].b,k));
}
// printf("f[%d][%d]=%lld\n",i,j,f[i][j]);
}
}
cout<<f[m][n]<<endl;
return 0;
}
/*
50 10
52 3
92 4
55 5
30 4
19 4
42 2
4 5
25 4
43 1
49 1
*/