Matrix67要在下個月交給老師n篇論文,論文的內容能夠從m個課題中選擇。因爲課題數有限,Matrix67不得不重複選擇一些課題。完成不一樣課題的論文所花的時間不一樣。具體地說,對於某個課題i,若Matrix67計劃一共寫x篇論文,則完成該課題的論文總共須要花費Ai*x^Bi個單位時間(係數Ai和指數Bi均爲正整數)。給定與每個課題相對應的Ai和Bi的值,請幫助Matrix67計算出如何選擇論文的課題使得他能夠花費最少的時間完成這n篇論文。ios
第一行有兩個用空格隔開的正整數n和m,分別表明須要完成的論文數和可供選擇的課題數。spa
如下m行每行有兩個用空格隔開的正整數。其中,第i行的兩個數分別表明與第i個課題相對應的時間係數Ai和指數Bi。code
輸出完成n篇論文所須要耗費的最少時間。ci
#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N=205; #define int long long int a[N],b[N],f[N][N]; signed main(){ int n,m; cin>>n>>m; //for(int i=1;i<=m;i++)scanf("%lld%lld",&a[i],&b[i]); for(int i=1;i<=m;i++){ scanf("%lld%lld",&a[i],&b[i]); for(int j=1;j<=n;j++){ for(int k=0;k<=j;k++){ int p=a[i]*pow(k,b[i]); if(f[i][j]==0||i==1)f[i][j]=f[i-1][j-k]+p; else f[i][j]=min(f[i][j],f[i-1][j-k]+p); } } } cout<<f[m][n]<<endl; }