洛谷
有點長。
首先對於需要被鏈結的兩個點,樣例中間基本上把所有的情況都給出來了。
但是還缺了一種從下面繞道左邊在從整個上面跨過去在從右邊繞到下面來的情況(從反過來是一樣的)
然後把所有方法分類之後發現實際上只有\(4\)種決策。
而\(4\)種決策中,兩兩一組,可以發現對於後面結果的影響是相同的,
那麼只需要貪心的考慮選擇兩種決策的較優值。
所以只剩下兩種方法了,直接爆搜+最優性剪枝,拿個二進位制什麼的狀壓一下計算貢獻,
時間複雜度\(o(2^)\)
#include#include#includeusing namespace std;
#define max 50
inline int read()
int cnt[1<<22],n,m,ans;
int a[max],l[max],r[max],c[max],b[max],st[max],lst[max];
void dfs(int x,int s,int tot)
int s=cnt[st[x]&s];
dfs(x+1,s|(1<>1]+(i&1);mx=max(mx,1<<(n/2));
for(int i=1;i<=n;++i)a[i]=read(),lst[i]=b[i]=c[i]=st[i]=0;
for(int i=n;i;--i)
if(!lst[a[i]])lst[a[i]]=i;
else l[m]=i,r[m]=lst[a[i]],++m;
reverse(&l[0],&l[m]);reverse(&r[0],&r[m]);
for(int i=0;il[i])
dfs(0,0,0);printf("%d\n",ans);
} return 0;
}
洛谷 P2409 小Y的積木 (dp)
y是個大建築師,他總能用最簡單的積木拼出最有創意的造型。y手上有n盒積木,每個積木有個重量。現在他想從每盒積木中拿一塊積木,放在一起,這一堆積木的重量為每塊積木的重量和。現在他想知道重量和最小的k種取法的重量分別是多少。只要任意更換一塊積木,就視為一種不同的取法。如果多種取法重量總和一樣,我們需要輸...
洛谷 小a和uim之大逃離
題意 有乙個 n m的巨幅矩陣,矩陣的每個格仔上有一坨0 k不等量的魔液。怪物各給了小a和uim乙個魔瓶,說道,你們可以從矩陣的任乙個格仔開始,每次向右或向下走一步,從任乙個格仔結束。開始時小a用魔瓶吸收地面上的魔液,下一步由uim吸收,如此交替下去,並且要求最後一步必須由uim吸收。魔瓶只有k的容...
洛谷1373小a和uim之大逃離
小a和uim來到雨林中探險。突然一陣北風吹來,一片烏雲從北部天邊急湧過來,還伴著一道道閃電,一陣陣雷聲。剎那間,狂風大作,烏雲布滿了天空,緊接著豆大的雨點從天空中打落下來,只見前方出現了乙個披頭散髮 青面獠牙的怪物,低沉著聲音說 呵呵,既然你們來到這,只能活下來乙個!小a和他的小夥伴都驚呆了!瞬間,...