日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2287

發布時間:2023/11/30 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2287 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/* 分析問題的本質,然后用動態規劃的方法來做不錯的DP問題,剛開始用二分圖匹配,TLE了 然后想貪心,想了多個方法都不行。我覺得關鍵是對相等數值的判斷上,貪心不好處理。最后,經提示,DP之。 DP之前有幾點要知道,其實我在貪心的時候也想到了因為所有的馬都要比賽,所以我們按照齊王從大分數馬到小分數馬排序,這樣做其實沒有什么深道理。 對于國王的馬,如果找不到比的過的馬,就找最小的馬,如果相等話,可以選擇平局也可以選擇找最小的馬。 DP就是來處理這兒得問題的。 構造DP方程這樣來做。當然之前要對馬從大到小排序 DP[i][j],表示已經比了i皮馬了,田雞選擇了前j皮強馬,選擇i-j皮差馬得到的分值的最大值。 這樣就可以夠早轉移方程了 這里我的數組是o-indexed的 DP[i+1][j+1] = DP[i][j] + g(j,i) //選擇了強馬了 DP[i+1][j] = DP[i][j] + g(N-(i-j),i) //選擇了差馬了 */// include file #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cctype> #include <ctime>#include <iostream> #include <sstream> #include <fstream> #include <iomanip> #include <bitset>#include <algorithm> #include <string> #include <vector> #include <queue> #include <set> #include <list> #include <functional>using namespace std;// typedef typedef __int64 LL;// #define read freopen("in.txt","r",stdin) #define write freopen("out.txt","w",stdout)#define Z(a,b) (a<<b) #define Y(a,b) (a>>b)const double eps = 1e-6; const double INFf = 1e100; const int INFi = 1000000000; const LL INFll = (LL)1<<62; const double Pi = acos(-1.0);template<class T> inline T sqr(T a){return a*a;} template<class T> inline T TMAX(T x,T y) {if(x>y) return x;return y; } template<class T> inline T TMIN(T x,T y) {if(x<y) return x;return y; } template<class T> inline T MMAX(T x,T y,T z) {return TMAX(TMAX(x,y),z); } template<class T> inline T MMIN(T x,T y,T z) {return TMIN(TMIN(x,y),z); } template<class T> inline void SWAP(T &x,T &y) {T t = x;x = y;y = t; }// code begin int A[1010]; int B[1010]; int N; int DP[1010][1010]; //這個DP狀態是這樣的,DP[i][j],i表示國王出了i皮強馬,j是田雞出了幾皮馬,達到的最大值。n^2的算法inline int g(int j,int i) {if(A[j]==B[i]) return 0;if(A[j]<B[i]) return -200;return 200; } int main() {read;write;while(scanf("%d",&N)==1){if(N==0) break;for(int i=0;i<N;i++) scanf("%d",A+i);for(int i=0;i<N;i++) scanf("%d",B+i);sort(A,A+N,greater<int>());sort(B,B+N,greater<int>());memset(DP,0,sizeof(DP)); for(int i=0;i<=N;i++) for(int j=0;j<=N;j++) DP[i][j] = -INFi;DP[1][0] = g(N-1,0);DP[1][1] = g(0,0);for(int i=1;i<N;i++){for(int j=0;j<=i;j++){// iDP[i+1][j+1] = TMAX( DP[i+1][j+1] , DP[i][j] + g(j,i) );// DP[i+1][j] = TMAX( DP[i+1][j] , DP[i][j] + g(N-(i-j)-1,i));}}int ans = -INFi;for(int i=0;i<=N;i++){if(DP[N][i]>ans)ans=DP[N][i];}printf("%d\n",ans);}return 0; }

轉載于:https://www.cnblogs.com/ac2012/archive/2011/04/17/2019123.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的2287的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。