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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hdu5693 D gamehdu 5712 D++ game

發布時間:2024/7/5 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu5693 D gamehdu 5712 D++ game 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:5693

題目鏈接:5712

對于這個D game。注意消除之后兩遍的序列是可以拼合到一起的!我們可以想到有區間DP的做法。我們設\(f[i][j]\)表示區間i,j可以被消除。

顯然如果這個區間可以被消除,則操作一定可以被分解成一次消除兩個k1次,一次消除三個k2次。所以我們只考慮消除兩個和消除三個的情況即可。

開始可以把公差放進set里面,方便之后查詢。

具體轉移見代碼。

處理完哪些區間可以被消除之后,我們可以利用貪心來計算最大消除的數量。(要先把可行區間放入到一個vector里面,然后排序,按照長度為第一關鍵字,左端點為第二關鍵字。因為大區間一定覆蓋它里面的小區間,所以我們只要遇到自己區間已經被計算過了就不用計算這整個區間了)。

代碼如下:

#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<set> #include<vector> #define MAXN 310 using namespace std; int t,n,m,cur,ans; struct Edge{int l,r,dis;}; int a[MAXN],f[MAXN][MAXN],done[MAXN],dp[MAXN]; set<int>s; vector<Edge>v; inline bool cmp(struct Edge x,struct Edge y) { if(x.dis==y.dis) return x.l<y.l;return x.dis>y.dis; } int main() {#ifndef ONLINE_JUDGEfreopen("ce.in","r",stdin);#endifscanf("%d",&t);while(t--){ans=0;s.clear();v.clear();memset(f,0,sizeof(f));memset(done,0,sizeof(done));scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d",&a[i]),f[i][i-1]=1;for(int i=1;i<=m;i++) scanf("%d",&cur),s.insert(cur);for(int i=1;i<=n;i++){for(int l=1;l+i<=n;l++){int r=l+i;//printf("l=%d r=%d\n",l,r);if(f[l+1][r-1]&&s.count(a[r]-a[l])) f[l][r]=1;if(!f[l][r]){for(int k=l+1;k<=r-1;k++){int cha1=a[r]-a[k],cha2=a[k]-a[l];if((f[l][k-1]&&f[k][r])||(f[l+1][k-1]&&f[k+1][r-1]&&cha1==cha2&&s.count(cha1))){f[l][r]=1;break;}}}}}for(int i=1;i<=n-1;i++)for(int j=i+1;j<=n;j++)if(f[i][j])v.push_back((Edge){i,j,j-i+1});sort(v.begin(),v.end(),cmp);int cur=0;for(int i=0;i<v.size();i++){bool flag=true;for(int j=v[i].l;j<=v[i].r;j++)if(done[j]==1){flag=false;break;}if(flag==false) continue;for(int j=v[i].l;j<=v[i].r;j++)done[j]=1;}for(int i=1;i<=n;i++) if(done[i]) ans++;printf("%d\n",ans);}return 0; }

然后對于那個加強版。
我想的是因為它的公差的種類數量很少,所以我想的是直接記錄一下哪個區間里面有多少種公差,那么就知道了消除這個區間至少需要多少次。但是這樣的話沒有辦法判斷一次消除到底有沒有滿足消除數量在min,max范圍內。。。。

所以說這個題我還木有A掉。。。。但是在網上也沒有找到題解。。。。就先把自己WA的代碼放在這里好了。。。

#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<set> #include<vector> #include<map> #define MAXN 100 using namespace std; int t,n,m,cur,ans,minn,maxx,cnt,kkk; struct Edge{int l,r,dis;}; struct Node{int sum[40];}node[MAXN][MAXN]; int a[MAXN],f[MAXN][MAXN],done[MAXN],dp[MAXN]; set<int>s; vector<Edge>v; map<int,int>id; inline bool cmp(struct Edge x,struct Edge y) { if(x.dis==y.dis) return x.l<y.l;return x.dis>y.dis; } int main() {#ifndef ONLINE_JUDGEfreopen("ce.in","r",stdin);#endifscanf("%d",&t);while(t--){kkk++;ans=cnt=0;s.clear();v.clear();memset(f,0,sizeof(f));memset(done,0,sizeof(done));scanf("%d%d%d%d",&n,&m,&minn,&maxx);for(int i=1;i<=n;i++) scanf("%d",&a[i]);for(int i=1;i<=m;i++) scanf("%d",&cur),s.insert(cur),id[cur]=i;for(int i=1;i<=n;i++) {f[i][i-1]=1;if(s.count(a[i+1]-a[i]))node[i][i-1].sum[id[a[i+1]-a[i]]]=1;}for(int i=1;i<=n;i++){for(int l=1;l+i<=n;l++){int r=l+i;if(f[l+1][r-1]&&s.count(a[r]-a[l])&&a[r]!=a[r-1]&&a[l]!=a[l+1]) { f[l][r]=1;for(int k=1;k<=32;k++) node[l][r].sum[k]=node[l+1][r-1].sum[k];node[l][r].sum[id[a[r]-a[l]]]=1;}vector<int>put,cur_ans;if(!f[l][r]){for(int k=l+1;k<=r-1;k++){int cha1=a[r]-a[k],cha2=a[k]-a[l];if(f[l][k-1]&&f[k][r]&&a[k]!=a[k-1]){f[l][r]=1;put.clear();for(int p=1;p<=32;p++)if(node[l][k-1].sum[p]||node[k][r].sum[p])put.push_back(p);if(cur_ans.size()==0)for(int q=0;q<put.size();q++)cur_ans.push_back(put[q]);if(cur_ans.size()!=0&&put.size()<cur_ans.size()){cur_ans.clear();for(int q=0;q<put.size();q++)cur_ans.push_back(put[q]);}}if(f[l+1][k-1]&&f[k+1][r-1]&&cha1==cha2&&s.count(cha1)){if(a[l]==a[l+1]||a[k-1]==a[k]||a[k]==a[k+1]||a[r-1]==a[r]) continue;f[l][r]=1;put.clear();for(int p=1;p<=32;p++)if(node[l+1][k-1].sum[p]||node[k+1][r-1].sum[p]||p==id[cha1])put.push_back(p);if(cur_ans.size()==0)for(int q=0;q<put.size();q++)cur_ans.push_back(put[q]);if(cur_ans.size()!=0&&put.size()<cur_ans.size()){cur_ans.clear();for(int q=0;q<put.size();q++)cur_ans.push_back(put[q]);}}}}if(f[l][r])for(int k=0;k<cur_ans.size();k++) node[l][r].sum[cur_ans[k]]=1;}}for(int i=1;i<=n-1;i++)for(int j=i+1;j<=n;j++)if(f[i][j])v.push_back((Edge){i,j,j-i+1});sort(v.begin(),v.end(),cmp);int cnt=0;for(int i=0;i<v.size();i++){if(v[i].dis<minn) continue;//int k1=v[i].dis/minn;//if((maxx-minn)*k<v[i].dis-k*minn) continue;int k=v[i].dis/maxx+(v[i].dis%maxx==0?0:1);if((v[i].dis%maxx!=0)&&(v[i].dis%maxx+(k-1)*(maxx-minn)<minn)) continue;bool flag=true;for(int j=v[i].l;j<=v[i].r;j++)if(done[j]==1){flag=false;break;}if(flag==false) continue;for(int j=v[i].l;j<=v[i].r;j++)done[j]=1;for(int j=1;j<=32;j++)if(node[v[i].l][v[i].r].sum[j])cnt++;}for(int i=1;i<=n;i++) if(done[i]) ans++;printf("Case #%d:\n%d %d\n",kkk,ans,cnt);}return 0; }

轉載于:https://www.cnblogs.com/fengxunling/p/10351015.html

總結

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

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

主站蜘蛛池模板: 香蕉视频一级片 | 99久久精品免费视频 | 人人妻人人澡人人爽国产一区 | 奇米影视av | 综合久久av| 中文av字幕 | 久久精品视频免费播放 | 欧美人与性动交ccoo | 91国产中文字幕 | 淫欲av | 手机看片1024国产 | 夜夜天堂 | 欧美毛片免费看 | 成人黄色激情小说 | 亚洲永久视频 | 狂野欧美 | 国产精品欧美久久久久天天影视 | 封神榜二在线高清免费观看 | 日本久久伊人 | 肉色欧美久久久久久久免费看 | 少妇高潮惨叫久久久久 | 人妻与黑人一区二区三区 | 亚洲 欧美 日韩 国产综合 在线 | 黄页网站免费观看 | 毛片在线播放视频 | 亚洲精品88 | 国产女人高潮视频 | 欧美日韩一区二区三区在线播放 | 精品国产一区二区不卡 | 91老女人 | 久草免费在线视频观看 | 欧美r级在线观看 | 天天干夜夜嗨 | 亚洲第一区在线观看 | 中文写幕一区二区三区免费观成熟 | 国产人妻精品久久久久野外 | 亚洲熟妇一区二区三区 | a级片中文字幕 | 福利精品| 久久久99国产精品免费 | 国产乱仑 | 狠狠网 | 91精品久久久久久久久久 | 女女调教被c哭捆绑喷水百合 | 成人在线播放网站 | 久久免费毛片 | 青青草原一区二区 | 男人天堂国产 | 色乱码一区二区三区在线男奴 | 粉嫩欧美一区二区三区 | 黄色福利片 | 91色区| 亚洲区 欧美区 | 激情伊人五月天 | 中文av资源 | 国产探花精品在线 | 亚洲无码乱码精品国产 | 免费在线观看黄视频 | 国产绿帽刺激高潮对白 | 在线亚洲欧美 | 免费激情av | 亚洲成人资源 | 国产在线精 | 精品国产鲁一鲁一区二区张丽 | 欧美人与性动交a欧美精品 日韩免费高清视频 | 一本久久综合 | 亚洲av片一区二区三区 | 精品久久一 | 麻豆av电影在线 | 国产一二三在线视频 | 尤物久久 | 亚洲AV无码乱码国产精品牛牛 | 色呦呦一区 | 性巴克成人免费网站 | 九九人人| 毛片福利 | 依人在线视频 | 国产美女视频免费观看下载软件 | 日韩一二三四区 | 日韩一区二区三区视频在线 | 久久天天东北熟女毛茸茸 | 91在线看 | 亚洲激情av在线 | 欧美午夜一区二区三区 | 欧美九九| 高级毛片| 污污网站在线 | 亚洲国产欧美在线人成 | 麻豆短视频在线观看 | 久久久久久久久久久电影 | 日韩精品国产AV | 久久国产精品无码网站 | 免费看a视频 | 国产一区麻豆 | 国产九九九精品 | 中文字幕三级电影 | 国产页| 日韩精品福利在线 | 亚洲天堂免费视频 |