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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hdu4403暴力搜索

發布時間:2025/6/17 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu4403暴力搜索 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
? ? ?給你一個數字串,讓你在里面添加一個=和若干個+,使等式成立.


思路:

? ? ?lmax最大是15,直接暴搜,無壓力,關鍵是判重,要在答案的時候判重,一開始在進隊列之前判的,各種wa,哎!后來才發現如果在之前判斷就不能得到當前什么符號都不加,而下一個有符號了,判重我用的是map,隨意什么只要別爆內存就行,水搜索竟然調了2個小時,丟臉啊...


#include<stdio.h> #include<string.h> #include<queue> #include<map> using namespace std;typedef struct {int mk[16];char str[16];int nowid ,deng; }NODE;NODE xin ,tou; int nn; map<__int64 ,__int64>mark;bool MK(NODE aa) {__int64 sum = 0;for(int i = 0 ;i <= nn ;i ++)sum = sum * 10 + aa.mk[i];if(mark[sum]) return 1;mark[sum] = 1;return 0; }bool ok(NODE tou) {if(tou.deng){int l ,r;l = r = 0;int sum = 0;int mki;for(int i = 0 ;tou.mk[i] != 2 ;i ++){if(tou.mk[i] == 1){l += sum;sum = tou.str[i] - 48;}else{sum = sum * 10 + tou.str[i] - 48;}mki = i;}l += sum;sum = 0;for(int i = mki + 1;i <= nn ;i ++){if(tou.mk[i] == 1){r += sum;sum = tou.str[i] - 48;}else{sum = sum * 10 + tou.str[i] - 48;}}r += sum;return l == r && !MK(tou); }return 0; }int BFS() {memset(xin.mk ,0 ,sizeof(xin.mk));nn = strlen(xin.str) - 1;xin.nowid = 0;xin.deng = 0;queue<NODE>q;q.push(xin);int ans = 0;mark.clear();while(!q.empty()){tou = q.front();q.pop();if(ok(tou))ans ++;if(tou.nowid == nn) continue; if(!tou.deng)// = {xin = tou;xin.deng = 1;xin.nowid = tou.nowid + 1;xin.mk[xin.nowid] = 2;q.push(xin); }//+ xin = tou;xin.deng = tou.deng;xin.nowid = tou.nowid + 1;xin.mk[xin.nowid] = 1;q.push(xin);// xin = tou;xin.deng = tou.deng;xin.nowid = tou.nowid + 1;xin.mk[xin.nowid] = 0;q.push(xin);} return ans; }int main () {while(~scanf("%s" ,xin.str) && strcmp("END" ,xin.str)){printf("%d\n" ,BFS());}return 0; }

總結

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

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