JZOJ 5453. 【NOIP2017提高A组冲刺11.5】好路线
Description
nodgd在旅游。現在,nodgd要從城市的西北角走到東南角去。這個城市的道路并不平坦,nodgd希望找出一條相對比較好走的路。
nodgd事先已經得到了這個城市的地圖。地圖上這個城市是一個n*m的矩形,nodgd現在站在坐標為(1,1)的位置,需要到達坐標為(n,m)的位置。這張地圖上用非負整數標記了每個整數坐標點的海拔,坐標為(x,y)的位置的海拔是?(x,y)。nodgd希望找出一條路線,路線中任意時刻都在向正東或向正南走,而且只在整數坐標點的地方轉彎,使得路上經過的n+m?1個整數坐標點的海拔的方差最小。然而萬能的nodgd當然知道該怎么走,也當然知道方差最小是多少,只是想順便考考你。
在本題中為了方便,你只需要求出(n+m?1)^2×σ^2的最小值即可,眾所周知這是個整數。
Input
第一行輸入兩個整數n,m,表示城市的大小。
接下來n行,每行m個數,其中第x行第y個數就是?(x,y)。
Output
輸出一行一個整數,表示(n+m?1)^2×σ^2的最小值。
Sample Input
2 2
1 2
3 4
Sample Output
14
Data Constraint
對于30%的數據,1≤n,m≤10;
對于50%的數據,1≤n,m≤20;
對于100%的數據,1≤n,m≤50,0≤?(x,y)≤50。
Hint
樣例解釋:有兩條路1-2-4和1-3-4,方差都等于14/9,所以方差最小值是14/9,輸出14。
Solution
首先化簡式子,設
k=n+m?1 S=X1+X2+……+Xk則有:
x=Sk
σ2=(X1?Sk)2+(X2?Sk)2+……+(Xk?Sk)2k
化簡:
σ2=(X2k+X22+……+X2k)?S2kk所以就得到式子:
k2σ2=k(X2k+X22+……+X2k)?S2觀察數據范圍,搜索似乎不太可行,于是我們考慮DP。
設 F[i][j][S] 表示走到 (i,j) ,狀態為 S 的最優值。
發現設最優值不好轉移,根據單調性可知可以改成最優值下的平方和,最后統計一遍答案即可。
往下走則有:F[i+1][j][S+a[i+1][j]]=Min{F[i][j][S]+a[i+1][j]2}
往右走同理,由于 h 值的限制,時間復雜度就是 O(N4) ,可以接受。
總結:
看到式子就想到化簡;
看到方差就想到 平方和 與 和的平方 ;
平均數 可以用 總和 除以 總數 代替。
Code
#include<cstdio> #include<cstring> #define work(x,y) x=min(x,y) using namespace std; const int N=52,inf=1e9; int n,m,num,mx,ans=inf; int a[N][N],b[N][N],f[N][N][N*N<<1]; inline int read() {int X=0,w=1; char ch=0;while(ch<'0' || ch>'9'){if(ch=='-') w=-1;ch=getchar();}while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();return X*w; } inline int max(int x,int y) {return x>y?x:y; } inline int min(int x,int y) {return x<y?x:y; } int main() {n=read(),m=read(),num=n+m-1;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){mx=max(mx,a[i][j]=read());b[i][j]=a[i][j]*a[i][j];}memset(f,60,sizeof(f));f[1][1][a[1][1]]=b[1][1];mx*=num;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)for(int k=0;k<=mx;k++){if(i<n && k+a[i+1][j]<=mx) work(f[i+1][j][k+a[i+1][j]],f[i][j][k]+b[i+1][j]);if(j<m && k+a[i][j+1]<=mx) work(f[i][j+1][k+a[i][j+1]],f[i][j][k]+b[i][j+1]);}for(int k=0;k<=mx;k++)if(f[n][m][k]<inf) work(ans,num*f[n][m][k]-k*k);printf("%d",ans);return 0; } 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的JZOJ 5453. 【NOIP2017提高A组冲刺11.5】好路线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JZOJ 5452. 【NOIP2017
- 下一篇: JZOJ 5455. 【NOIP2017