A. Anti-knapsack
题意:
给我们一个n,一个k(n,k<=1000),需要我们得到一个集合,集合的元素全部小于n,并且任意子集相加不等于k,而且这个集合元素相加尽可能大。
题解:
贪心。
1.若k<n,则{x|k<x<=n,x∈Z} 都满足
2.考虑小于k的那些元素中,我们希望取到最多的元素,那么只能取一半,并且是最大的那一半,例如k=7时,那么可以取4,5,6;如果k=8,那么可以取4,5,6,7
代码如下:
#include<bits/stdc++.h> //poj不支持
#define IOS ios::sync_with_stdio(false)
using namespace std;
typedef long long ll;
typedef double ld;
template <typename T>
inline