動態規劃解決投資決策問題
阿新 • • 發佈:2018-12-17
#include<iostream> #include<cstring> using namespace std; int T[10][10];//i表示投資的專案,j表示投資的錢,T[i][j]表示利潤 int get_most_money(int x,int k)//x為錢,k為專案數 { int Money[10][10];//money[i][j]表示用j元投資前i個專案獲得的最大利潤 //初始化 for(int i=0;i<=x;i++) memset(Money[i],0,4*(k+1)); for(int i=1;i<=k;i++) Money[1][i]=T[1][i]; //Money[i][j]=max{T[i][s]+Money[i-1][j-s}(0<=s<=j) for(int i=2;i<=x;i++) { for(int j=1;j<=k;j++) { int _max=0; for(int s=0;s<=j;s++) { if(_max<T[i][s]+Money[i-1][j-s]) _max=T[i][s]+Money[i-1][j-s]; } Money[i][j]=_max; } } //輸出Money for(int i=0;i<=x;i++) { for(int j=0;j<=k;j++) { cout<<Money[i][j]<<" "; } cout<<endl; } return Money[x][k]; } int main() { int x,k; //輸入資金與專案個數 cin>>x>>k; //輸入投資專案本金與利潤的關係 for(int i=1;i<=x;i++) for(int j=1;j<=k;j++) cin>>T[i][j]; int money=get_most_money(x,k); cout<<money<<endl; return 0; } /* 4 6 1 2 3 4 5 7 2 3 4 4 5 5 1 3 5 5 5 6 3 3 4 6 7 7 */