Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
滚动数组N^2实现,但是,注意不要搞成N^3# include <cstdio> # include <algorithm> # include <vector> using namespace std; # define N 2005 long long dp[2][2][N]; int data[N]; int list[N],p=0,n; # define abs(pos) ((pos)<0?-(pos):(pos)) # define now i&1 # define last (i-1)&1 int main() { //freopen("input","r",stdin); scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",data+i); list[p++]=data[i]; } sort(list,list+n); p=unique(list,list+n)-list; for(int i=0;i<p;i++) dp[0][0][i]=dp[0][1][i]=abs(data[0]-list[i]); for(int i=1;i<p;i++) dp[0][0][i]=min(dp[0][0][i],dp[0][0][i-1]); for(int i=p-2;i>=0;i--) dp[0][1][i]=min(dp[0][1][i],dp[0][1][i+1]); for(int i=1;i<n;i++) { for(int j=0;j<p;j++) dp[now][0][j]=dp[last][0][j]+abs(data[i]-list[j]), dp[now][1][j]=dp[last][1][j]+abs(data[i]-list[j]); for(int j=1;j<p;j++) dp[now][0][j]=min(dp[now][0][j],dp[now][0][j-1]); for(int j=p-2;j>=0;j--) dp[now][1][j]=min(dp[now][1][j+1],dp[now][1][j]); } printf("%I64d\n",dp[(n-1)&1][0][p-1]); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator