[BZOJ2064]分裂

[BZOJ2064]分裂

試題描述

背景: 和久必分,分久必和。。。 題目描述: 中國歷史上上分分和和次數非常多。。通讀中國歷史的WJMZBMR表示毫無壓力。 同時經常搞OI的他把這個變成了一個數學模型。 假設中國的國土總和是不變的。 每個國家都可以用他的國土面積代替, 又兩種可能,一種是兩個國家合并為1個,那么新國家的面積為兩者之和。 一種是一個國家分裂為2個,那么2個新國家的面積之和為原國家的面積。 WJMZBMR現在知道了很遙遠的過去中國的狀態,又知道了中國現在的狀態,想知道至少要幾次操作(分裂和合并各算一次操作),能讓中國從當時狀態到達現在的狀態。

輸入

第一行一個數n1,表示當時的塊數,接下來n1個數分別表示各塊的面積。 第二行一個數n2,表示現在的塊,接下來n2個數分別表示各塊的面積。

輸出

一行一個數表示最小次數。

輸入示例

1 6
3 1 2 3

輸出示例

2

數據規模及約定

對于100%的數據,n1,n2<=10,每個數<=50
對于30%的數據,n1,n2<=6,

題解

設 f(S1, S2) 表示 n1 個數中選擇了集合?S1 的數,n2 個數中選擇了集合 S2 的數。轉移的時候我們枚舉 S2 的子集 tS,然后找到和 tS 中元素和相同的 S1 的子集 ttS,那么 f(S1, S2) = min{ f(ttS, tS) + f(S1 ^ ttS, S2 ^ tS) },除此之外,還可以直接把 S1 中所有的數合并起來,然后分裂成 S2 中的數,步數即為 S1 中二進制位數 + S2 中二進制位數 - 2。

至于如何找到“和 tS 中元素和相同的 S1 的子集 ttS”,預處理即可,大力搞一個 vector,令 Set[sum] 存儲所有元素和等于 sum 的集合。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <algorithm>
#include <vector>
using namespace std;int read() {int x = 0, f = 1; char c = getchar();while(!isdigit(c)){ if(c == '-') f = -1; c = getchar(); }while(isdigit(c)){ x = x * 10 + c - '0'; c = getchar(); }return x * f;
}#define maxn 15
#define maxs 3010
#define maxsum 510
#define oo 2147483647int n1, n2, A1[maxn], A2[maxn];
vector <int> Set[maxsum];
int Sum1[maxs], Sum2[maxs], cbin[maxs];int f[maxs][maxs];
int dp(int S1, int S2) {int& ans = f[S1][S2];if(ans < oo) return ans;if(!cbin[S1] && !cbin[S2]) return ans = 0;if(cbin[S1] == 1 && cbin[S2] == 1) return ans = 0;ans = cbin[S1] + cbin[S2] - 2;for(int tS = S2 - 1 & S2; tS; tS = tS - 1 & S2)for(int i = 0; i < Set[Sum2[tS]].size(); i++) if((S1 | Set[Sum2[tS]][i]) == S1)ans = min(ans, dp(Set[Sum2[tS]][i], tS) + dp(Set[Sum2[tS]][i] ^ S1, tS ^ S2));return ans;
}int main() {n1 = read(); for(int i = 0; i < n1; i++) A1[i] = read();n2 = read(); for(int i = 0; i < n2; i++) A2[i] = read();int all = (1 << n1) - 1;for(int S = 0; S <= all; S++) {int sum = 0; cbin[S] = 0;for(int j = 0; j < n1; j++) if(S >> j & 1) sum += A1[j], cbin[S]++;Set[sum].push_back(S); Sum1[S] = sum;}all = (1 << n2) - 1;for(int S = 0; S <= all; S++) {cbin[S] = 0;for(int j = 0; j < n2; j++) if(S >> j & 1) Sum2[S] += A2[j], cbin[S]++;}for(int S1 = 0; S1 <= (1 << n1) - 1; S1++)for(int S2 = 0; S2 <= all; S2++) f[S1][S2] = oo;printf("%d\n", dp((1 << n1) - 1, all));return 0;
}

?

轉載于:https://www.cnblogs.com/xiao-ju-ruo-xjr/p/6930993.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370506.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370506.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370506.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSS3選擇器

基本選擇器 回顧選擇器 通配符選擇器元素選擇器類選擇器ID選擇器后代選擇器新增基本選擇器 子元素選擇器相鄰兄弟選擇器通用兄弟選擇器群組選擇器 子元素選擇器 概念&#xff1a;子元素選擇器只能選擇某元素的子元素 語法&#xff1a;父元素 > 子元素 &#xff08;Fathe…

eclipse java工程目錄_轉載:Eclipse下的java工程目錄

對新手來講&#xff0c;一個Java工程內部的多個文件夾經常會讓大家困惑。更可惡的是莫名其妙的路徑問題&#xff0c;在Eclipse編寫Java程序中&#xff0c;出現頻率最高的錯誤很可能就是路徑問題。這些問題原因其實都是一個&#xff0c;就是關于Java工程內的文件結構理解不清&am…

作為JBoss AS 7模塊運行Drools 5.4.0 Final

Drools 5引入了業務邏輯集成平臺&#xff0c;該平臺為規則&#xff0c;工作流和事件處理提供了統一的集成平臺。 它是從頭開始設計的&#xff0c;因此每個方面都是一流的公民&#xff0c;毫不妥協。 Drools 5已分為4個主要子項目&#xff1a; Drools Guvnor&#xff08;BRMS …

postgres 支持的線程數_線程池被打滿了怎么處理呢,你是否真的了解線程池?

0、前言線程池&#xff0c;顧名思義就是線程的池子&#xff0c;在每次需要取線程去執行任務的時候&#xff0c;沒必要每次都創建新線程執行&#xff0c;線程池就是起著維護線程的作用&#xff0c;當有任務的時候就取出一個線程執行&#xff0c;如果任務執行完成則把線程放回到池…

[樹形DP]沒有上司的舞會

題目鏈接 思考 首先本題中的關系是一種樹形結構&#xff0c;而且符號最優子結構和無后效性&#xff0c;所以可以進行記憶化搜索。 那么首先要在這顆樹中選出一個點作為根節點&#xff0c;按照習慣我們將沒有父節點的點作為根節點。 接下來要思考的是 狀態&#xff1a; dp[i][0…

網頁自適應

1.viewport標簽 基本語法&#xff1a; <meta name”viewport” content”widthdevice-width,initial-scale1” /> 上面這行代碼的意思是&#xff0c;面積的100%&#xff0c;網頁寬度默認等于屏幕寬度&#xff08;widthdevice-width&#xff09;, 原始縮放比例&#x…

java 大數處理

頭文件&#xff1a;import java.util.*;import java.math.*; Scanner cin Scanner (System.in);//讀入while(cin.hasNext())//等價于!EOFncin.nextInt();//讀入一個int型的數ncin.nextBigInteger();//讀入一個大整數 輸出&#xff1a; System.out.print(n);//打印nSystem.out.…

java provider_Java SPI(Service Provider Interface)

//ServiceLoader實現了Iterable接口&#xff0c;可以遍歷所有的服務實現者public final class ServiceLoaderimplements Iterable{//查找配置文件的目錄private static final String PREFIX "META-INF/services/";//表示要被加載的服務的類或接口private final Clas…

帶有自定義注釋的Java注釋教程

Java注釋提供有關代碼的信息&#xff0c;并且它們對所注釋的代碼沒有直接影響。 在本教程中&#xff0c;我們將學習Java注釋&#xff0c;如何編寫自定義注釋 &#xff0c;注釋用法以及如何使用反射來解析注釋 。 注釋是在Java 1.5中引入的&#xff0c;現在它已在Hibernate&…

mybatis通用mapper_全網最全Mapper解析,附實操代碼幫你更好理解

今天給大家介紹一位老朋友當你第一次接觸Java開發的時候&#xff0c;這個老朋友就和你形影不離&#xff0c;當你要進行ORM的時候&#xff0c;單表的增刪改查&#xff0c;這位老朋友給了你極大的幫助&#xff0c;不知道你想到他了嗎&#xff1f;對&#xff0c;這就是通用mapper&…

初嘗微信小程序2-基本框架

基本框架&#xff1a; .wxml &#xff1a;頁面骨架 .wxss &#xff1a;頁面樣式 .js &#xff1a;頁面邏輯 描述一些行為 .json &#xff1a;頁面配置 創建一個小程序之后&#xff0c;app.js,app.json,app.wxss是必須的&#xff0c;而且名字也不能隨意更改&#xff0c;…

JSP內置對象,動作,指令總結

總的來說關于JSP界面有九大內置對象,7大動作,三大指令,現在博主就將這些粘貼出來,此文是很久前整理的學習筆記,如有雷同請諒解! jsp九大內置對象:1>out 向客戶端輸出數據,字節流.如out.print(" dgaweyr"); 2>request 接收客戶端的http請求.String getParameter…

洛谷 P1795 無窮的序列_NOI導刊2010提高(05)

P1795 無窮的序列_NOI導刊2010提高&#xff08;05&#xff09; 題目描述 有一個無窮序列如下&#xff1a; 110100100010000100000… 請你找出這個無窮序列中指定位置上的數字 輸入輸出格式 輸入格式&#xff1a;第一行一個正整數N&#xff0c;表示詢問次數&#xff1b; 接下來的…

java 取字符串中的數字_java截取字符串中的數字

隨便給你一個含有數字的字符串&#xff0c;比如&#xff1a;String s"eert343dfg56756dtry66fggg89dfgf";那我們如何把其中的數字提取出來呢&#xff1f;大致有以下幾種方法&#xff0c;正則表達式&#xff0c;集合類&#xff0c;還有就是String類提供的方法。1 Stri…

番石榴的對象類:Equals,HashCode和ToString

如果您有幸使用JDK 7 &#xff0c;那么新的可用Objects類 &#xff08; 至少對我來說 &#xff09;是實現“通用” Java對象方法&#xff08;例如equals&#xff08;Object&#xff09; [with Objects.equals&#xff08;Object&#xff0c;Object &#xff09; ]&#xff0c; …

此服務器的時鐘與主域控制器的時鐘不一致_中移動“超高精度時間同步服務器”開標,兩家中標...

8月25日&#xff0c;中國移動發布《2020年至2022年同步網設備集中采購_中標候選人公示》公告。兩家中標。同步網技術比較小眾&#xff0c;但是同步網是5G承載網的重要一環&#xff0c;分享一下&#xff0c;供大家參考。中標情況 標包1-時鐘同步設備中標候選人依次排序為&#x…

java 異常管理員_GitHub - kangZan/JCatch: Exception異常管理平臺,支持Java、PHP、Python等多種語言...

什么是JCatch當程序發生異常(Exception)&#xff0c;處理方式一般是通過日志文件記錄下來&#xff0c;這種方式很容易被忽略&#xff0c;而且查詢起來比較麻煩。JCatch提供了一種方案&#xff0c;當程序發生異常時&#xff0c;通過JCatch平臺接口提交到JCatch平臺&#xff0c;由…

oled

gnd、vcc、clk、miso、rst、mosi、cs 轉載于:https://www.cnblogs.com/scrazy/p/7892733.html

使用html css js實現計算器

使用html css js實現計算器&#xff0c;開啟你的計算之旅吧 效果圖&#xff1a; 代碼如下&#xff0c;復制即可使用&#xff1a; <!DOCTYPE html><html lang"en"> <head> <meta charset"utf-8"> <style> /* 主體 */ .co…

面向對象的三個基本特征

面向對象的三個基本特征是&#xff1a;封裝、繼承、多態。封裝 封裝最好理解了。封裝是面向對象的特征之一&#xff0c;是對象和類概念的主要特性。封裝&#xff0c;也就是把客觀事物封裝成抽象的類&#xff0c;并且類可以把自己的數據和方法只讓可信的類或者對象操作&#xff…