1. 程式人生 > >洛谷3004 [USACO10DEC]寶箱Treasure Chest

洛谷3004 [USACO10DEC]寶箱Treasure Chest

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