雙向搜尋感覺是個不錯的技巧啊
題目大意:
有n的物品(n<=30),平均(兩個人得到的物品差不能大於1)分給兩個人,每個物品在每個人心目中的價值分別為(vi,wi)
問兩人心目中的價值差最小是多少。
分析:直接暴搜目測會超時
想到先搜尋前一半,用陣列a[0][i]儲存第乙個人在前半段取 i 個物品兩個人的差的所有情況;
再搜尋後一半儲存兩個人的差的相反數,用相同的規則儲存在a[1]中。
要想總差最小只需要
a[0][i]-a[1][num-i] (num=n/2或 n/2+1)的絕對值最小即可..
找這個最小值可以用二分查詢優化
然後就不會超時了
ac**:
#include #include#include
#include
#include
#include
using
namespace
std;
#define inf 500000000
int a[2][32][70000
];int nn[2][32
];int v[32],w[32
];int
n;void dfs(int now,int e,int num,int ans,int
flag)
int p=flag?(-1):1
; dfs(now+1,e,num,ans-p*w[now],flag);
dfs(now+1,e,num+1,ans+p*v[now],flag);
}void
ini()
for(int i=0;i)
}int fun(int val,int
pos)
int k=upper_bound(a[1][pos],a[1][pos]+num,val)-a[1
][pos];
res=min(res,abs(val-a[1
][pos][k]));
if(k)
return
res;
}void
solve()
}for(int i=0;i<=n/2;i++)}}
printf(
"%d\n
",ans);
}int
main()
return0;
}
NOIP模擬賽 洛谷11月月賽
t1終於結束的起點 題解 列舉啊.斐波那契數 第46個爆int,第92個爆long long.發現結果一般是m的幾倍左右.不用擔心t。題解 貪心。從當前沒跳過的最高的和最低的之間來回跳。預計10分 include include include include define ll long long...
某古 11 月月賽 I 遊記
難度好評,沒有像我上次打的那場比賽那麼水了,不過自己的分數還是好低,只會前三題。希望你古月賽的題目一直都能像這場這麼有意思。三角形面積公式 s fracah 由於 a 相等,所以題目給出的其實就是 h 之比。題目中給出了 a,b,c,d 不妨令 a le b le c le d 由於題目給出的是正方...
洛谷11月月賽(284pts rank85)
我是比賽完後在去寫的 這是我第一次打洛谷月賽,之前一次是比賽完才去看而且寫了第一題就沒寫後面的了 284分,太水了,rank85左右 第一題第二題ac了,第三題寫了3 n的演算法,知道會超時,也知道滿分做法應該是只考慮有價值的狀態 但是還是沒想出正解,拿了70分 第四題想到了講評中說的錯誤的做法,然...