poj1157
今天開始做dp,感覺dp比較考思維能力,關(guān)于那個動態(tài)轉(zhuǎn)移方程,我一直很好奇人們是怎么推的呢??有沒有什么方法呢???
題目大意:
每種花有一個編號,有幾個花瓶,花瓶也是有編號的,每種花放在不同的花瓶的藝術(shù)價值不一樣,要你把這些花按某種策略放在這些花瓶里,得到藝術(shù)價值總值最大,并且,編號小的花所在的花瓶的編號要比編號大的花所在花瓶的編號小。 ?
ans[i][j]表示前i朵花放進前j個瓶子中的藝術(shù)值
a[i][j]表示第i多花放在第j個瓶子里面的藝術(shù)值
動態(tài)轉(zhuǎn)移方程:
ans[i][j]=max(ans[i][j-1],ans[i-1][j-1]+a[i][j]
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 5 int max(int a, int b) 6 { 7 return a>b?a:b; 8 } 9 int main() 10 { 11 int f,v; 12 int a[105][105]; 13 int ans[105][105]; 14 memset(ans,0,sizeof(ans)); 15 cin>>f>>v; 16 for(int i=1;i<=f;i++) 17 { 18 for(int j=1;j<=v;j++) 19 { 20 cin>>a[i][j]; 21 } 22 ans[i][i]=ans[i-1][i-1]+a[i][i]; 23 } 24 for(int i=1;i<=f;i++) 25 { 26 for(int j=i+1;j<=v;j++)//注意這里是j=i+1,j不可以從i開始 27 { 28 ans[i][j]=max(ans[i][j-1],ans[i-1][j-1]+a[i][j]); 29 } 30 } 31 cout<<ans[f][v]<<endl; 32 return 0; 33 }代碼短小精悍。
?
轉(zhuǎn)載于:https://www.cnblogs.com/devil-91/archive/2012/08/17/2644673.html
總結(jié)
- 上一篇: Oracle Compile 编译 无效
- 下一篇: ecshop几个价格