hdu 6092 Rikka with Subset
2017-08-08 17:05
351 查看
传送门
一个An序列,n个数,那么我所有的情况一定是2^n。而且首尾一定是都不取或者取为1,不取就是0的情况为1,尾为1是把所有数都加起来肯定是1,中间的情况就得慢慢判了。从左到右开始,跳过首来到第二个位置,这个位置一定是这个串中最小的一个数,只可能是1的情况。有多少个就是1的数字有多少个。来到第三个位置,这个数可能是
这个串第二小的数也就是2,或者是由2个1构成得到,再往右走可能是第三小的数也可能是之前的数加起来得到,比如3,可能我由1个3得到,也可能由1 1 1,1 2 得到。所
以你会从左递推得出最后的串,然后仔细想想是个背包吧?(xgg说是个背包,逃。 然后写了一下过了
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 231 Accepted Submission(s): 99
Problem Description
As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some math tasks to practice. There is one of them:
Yuta has n positive A1−An and
their sum is m.
Then for each subset S of A,
Yuta calculates the sum of S.
Now, Yuta has got 2n numbers
between [0,m].
For each i∈[0,m],
he counts the number of is
he got as Bi.
Yuta shows Rikka the array Bi and
he wants Rikka to restore A1−An.
It is too difficult for Rikka. Can you help her?
Input
The first line contains a number t(1≤t≤70),
the number of the testcases.
For each testcase, the first line contains two numbers n,m(1≤n≤50,1≤m≤104).
The second line contains m+1 numbers B0−Bm(0≤Bi≤2n).
Output
For each testcase, print a single line with n numbers A1−An.
It is guaranteed that there exists at least one solution. And if there are different solutions, print the lexicographic minimum one.
Sample Input
2
2 3
1 1 1 1
3 3
1 3 3 1
Sample Output
1 2
1 1 1
Hint
In the first sample, $A$ is $[1,2]$. $A$ has four subsets $[],[1],[2],[1,2]$ and the sums of each subset are $0,1,2,3$. So $B=[1,1,1,1]$
一个An序列,n个数,那么我所有的情况一定是2^n。而且首尾一定是都不取或者取为1,不取就是0的情况为1,尾为1是把所有数都加起来肯定是1,中间的情况就得慢慢判了。从左到右开始,跳过首来到第二个位置,这个位置一定是这个串中最小的一个数,只可能是1的情况。有多少个就是1的数字有多少个。来到第三个位置,这个数可能是
这个串第二小的数也就是2,或者是由2个1构成得到,再往右走可能是第三小的数也可能是之前的数加起来得到,比如3,可能我由1个3得到,也可能由1 1 1,1 2 得到。所
以你会从左递推得出最后的串,然后仔细想想是个背包吧?(xgg说是个背包,逃。 然后写了一下过了
Rikka with Subset
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 231 Accepted Submission(s): 99
Problem Description
As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some math tasks to practice. There is one of them:
Yuta has n positive A1−An and
their sum is m.
Then for each subset S of A,
Yuta calculates the sum of S.
Now, Yuta has got 2n numbers
between [0,m].
For each i∈[0,m],
he counts the number of is
he got as Bi.
Yuta shows Rikka the array Bi and
he wants Rikka to restore A1−An.
It is too difficult for Rikka. Can you help her?
Input
The first line contains a number t(1≤t≤70),
the number of the testcases.
For each testcase, the first line contains two numbers n,m(1≤n≤50,1≤m≤104).
The second line contains m+1 numbers B0−Bm(0≤Bi≤2n).
Output
For each testcase, print a single line with n numbers A1−An.
It is guaranteed that there exists at least one solution. And if there are different solutions, print the lexicographic minimum one.
Sample Input
2
2 3
1 1 1 1
3 3
1 3 3 1
Sample Output
1 2
1 1 1
Hint
In the first sample, $A$ is $[1,2]$. $A$ has four subsets $[],[1],[2],[1,2]$ and the sums of each subset are $0,1,2,3$. So $B=[1,1,1,1]$
#include <cstdio> #include <cmath> #include <iostream> #include <algorithm> #include <vector> #include <stack> #include <cstring> #include <queue> #include <set> #include <string> #include <map> #include <climits> #define PI acos(-1) using namespace std; typedef long long ll; typedef double db; const int maxn = 1e4 + 5; const int mod = 1e9 + 7; const int INF = 1e8 + 5; const ll inf = 1e15 + 5; const db eps = 1e-6; int n, m; int b[maxn]; void solve() { cin >> n >> m; for (int i = 0; i <= m; i++) scanf("%d", b + i); int c[maxn] = {0}; c[0] = 1; vector<int> v; for (int i = 1; i <= m; i++) { while (c[i] < b[i]) { v.push_back(i); for (int j = m - i; j >= 0; j--) { c[j+i] += c[j]; } //for (int j = 0; j <= m; j++) // cout << c[j] << ' '; // cout << endl; } } for (int i = 0; i < v.size(); i++) printf("%d%c", v[i], i == v.size() - 1 ? '\n' : ' '); } int main() { int t = 1, cas = 1; // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); scanf("%d", &t); while(t--) { // printf("Case %d: ", cas++); solve(); } return 0; }
相关文章推荐
- [HDU 6092] Rikka with Subset
- hdu 6092 Rikka with Subset
- HDU_6092 Rikka with Subset 【DP】
- hdu 6092 Rikka with Subset
- HDU 6092 Rikka with Subset
- HDU 6092-Rikka with Subset
- hdu 6092 Rikka with Subset
- HDU 6092 Rikka with Subset
- hdu 6092 Rikka with Subset
- HDU 6092:Rikka with Subset
- 2017 多校训练第五场 HDU 6092 Rikka with Subset
- hdu 6092 Rikka with Subset 背包(贪心)
- hdu 6092 Rikka with Subset
- HDU 6092 Rikka with Subset 反向DP
- HDU 6092 Rikka with Subset 贪心
- hdu 6092 Rikka with Subset
- (2017多校训练第五场)HDU - 6092 Rikka with Subset 0-1背包
- Rikka with Subset HDU - 6092 (傻瓜01背包)
- hdu 6092 Rikka with Subset
- HDU 6092 Rikka with Subset 【dp多重背包】【好题】