30pts求助,悬关
查看原帖
30pts求助,悬关
581345
Zpril_20211017楼主2023/7/28 18:01
#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 <= 20;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;
}
2023/7/28 18:01
加载中...