hdu 1087
阿新 • • 發佈:2018-04-29
acm求的是最長上升子序列的和。
數組dp[i]表示以i結尾的最長上升子序列的和,因為開始每個數字都可以單獨的成為一個子序列,所以初始化dp[i]用num[i]。
數組dp[i]表示以i結尾的最長上升子序列的和,因為開始每個數字都可以單獨的成為一個子序列,所以初始化dp[i]用num[i]。
參考文章:算法筆記p433
#include<algorithm> #include<cstdio> using namespace std; const int len=1001; int dp[len],num[len]; int main(){ int n; while(~scanf("%d",&n)&&n){ int ans=0; for(int i=0;i<n;i++){ scanf("%d",&num[i]); dp[i]=num[i]; } for(int i=0;i<n;i++){ for(int j=0;j<i;j++){ if(num[i]>num[j]&&dp[j]+num[i]>dp[i]) dp[i]=dp[j]+num[i]; } ans=max(ans,dp[i]); } printf("%d\n",ans); } return 0; }
hdu 1087