P1336 最佳课题选择

简单dp

//P1336 最佳课题选择
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf=1e17;
struct sub{
    int a,b;
}s[3000];
ll dp[3000][3000];
inline ll time(int i,int x){
    if(!x) return 0;
    return 1ll*s[i].a*(pow(x,s[i].b));
}
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>s[i].a>>s[i].b;
    }
    for(int i=0;i<=m;i++){
        for(int j=0;j<=n;j++){
            dp[i][j]=inf;
        }
    }
    for(int i=0;i<=m;i++){
        dp[i][0]=0;
    }
    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]+time(i,k));
            }
        }
    }
    cout<<dp[m][n];
    return 0;
}
原文地址:https://www.cnblogs.com/duojiaming/p/11720344.html