題目大意:給出n個數字,求滿足a+b+c=d最大的d
分析:先將等式變形為a+b=d-c,然後找出所有可能的a+b的值以及d-c的值,接著就直接匹配就行了。
**:
#include #include #include #include #include using namespace std;
const int maxn = 1111;
struct c
};vectorc, m;
vectorq;
int p[maxn];
int main()
int cnt1 = 0, cnt2 = 0;
c.clear();
m.clear();
q.clear();
for(int i = 0; i < n; i++) );
cnt1++;}}
for(int i = 0; i < n; i++) );
cnt2++;}}
int ans = 0;
int flag = 0;
sort(m.begin(), m.begin()+cnt2);
for(int i = 0; i < cnt2; i++)
q.push_back(m[i].sum);
for(int i = 0; i < cnt1; i++) }}
if(flag) printf("%d\n", ans);
else printf("no solution\n");
}return 0;
}
UVA 10125 Sumsets(二分查詢)
given s,a set of integers,find the largest d such that a b c d where a,b,c,and d are distinct elements of s.several s,each consisting of a line contai...
10125 Sumsets(折半列舉 二分)
該題和挑戰上一道題很類似,如果列舉四個值的話,複雜度太高。那麼我們可以想辦法將複雜度分開。方法是 先用o n 2 預處理出來a b,然後列舉c和d,二分查詢ab中有沒有恰好等於d c的值。細節參見 includeusing namespace std typedef long long ll con...
高效演算法設計專項 UVa 10125
暴力列舉顯然會tle。lrj書裡介紹了中途相遇法,用map實現了一下,就是先用o n 2 建立乙個a b到乙個整數的對映,然後再用o n 2 列舉d c就可以在o n 2 複雜度下解決該問題了。需要注意的是a b c d不能重複,這裡我用map 實現以判重。只不過具體 比較醜 include inc...