我用的是狀壓dp。
先預處理出可以在一組的集合。
然後對每種狀態列舉它的子集進行轉移。
像這樣子:
for(i=1;i<(1<\(f[i]\) 表示已經把 \(i\) 集合裡的數安頓好了需要幾個組。
。屬性:min
時間複雜度: \(o(n^2 \times 2^n+3^n)\),
其中 \(o(n^2 \times 2^n)\) 是預處理的複雜度,\(o(3^n)\) 是列舉子集的複雜度。
只用 \(22ms\) 就跑完了所有資料!
#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int n=16,s=(1<>n;
for(i=0;i=0;i--)
if(k} if(j==n)
} for(i=1;i<(1
f[i]=min(f[i],f[j]+f[i-j]);
cout
}
1118 數制轉換
1118 數制轉換.cpp 定義控制台應用程式的入口點。題目1118 數制轉換 時間限制 1 秒記憶體限制 32 兆特殊判題 否提交 5215解決 2061 題目描述 求任意兩個不同進製非負整數的轉換 2進製 16進製制 所給整數在long所能表達的範圍之內。不同進製的表示符號為 0,1,9,a,b...
11 18學習日誌
11.18學習日誌 css1 外部樣式表 2 內部樣式表3 內聯樣式表 綠葉學習網 1 元素選擇器 div 2 id選擇器 id選擇器 box 3 class選擇器 綠葉學習網 綠葉學習網 lv 4 子元素選擇器 father1 div father2 p1 5 相鄰選擇器 相鄰選擇器,就是選中該元...
題目1118 數制轉換
題目描述 求任意兩個不同進製非負整數的轉換 2進製 16進製制 所給整數在long所能表達的範圍之內。不同進製的表示符號為 0,1,9,a,b,f 或者 0,1,9,a,b,f 輸入 輸入只有一行,包含三個整數a,n,b。a表示其後的n 是a進製整數,b表示欲將a進製整數n轉換成b進製整數。a,b是...