洛谷3004 [USACO10DEC]寶箱Treasure Chest
阿新 • • 發佈:2018-06-18
AC 搜索 org urn names printf iostream 就是 for
題目:https://www.luogu.org/problemnew/show/P3004
一眼看上去就是記憶化搜索的dp。像 一雙木棋 一樣。
結果忘了記憶化。T了5個點。
然後加上記憶化。MLE。
參考一些,改成循環的dp。還是MLE。哈哈,根本沒改數組大小嘛!
又參考一些。
分析轉移,發現它可以設計成滾動數組。
總之就是這樣一道明明是簡單題的題。自己還是需要多練習……
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,a[5005],dp[2][5005],sum; int rdn() { int ret=0,fx=1;char ch=getchar(); while(ch>‘9‘||ch<‘0‘){if(ch==‘-‘)fx=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘)(ret*=10)+=ch-‘0‘,ch=getchar(); return ret*fx; } int main() { n=rdn(); for(int i=1;i<=n;i++)a[i]=rdn(); for(int i=n;i;i--) { memset(dp[i&1],0,sizeof dp[i&1]); dp[i&1][i]=a[i];sum=a[i]; for(int j=i+1;j<=n;j++) { sum+=a[j]; dp[i&1][j]=max(sum-dp[(i+1)&1][j],sum-dp[i&1][j-1]); } } printf("%d",dp[1][n]); return 0; }
洛谷3004 [USACO10DEC]寶箱Treasure Chest