AtCoder Tenka1 Programmer Beginner Contest D IntegerotS 数学
2017-10-01 19:32
706 查看
题目链接:http://tenka1-2017-beginner.contest.atcoder.jp/tasks/tenka1_2017_d
题意:给定n个数,每个数有一个a值一个b值,一个k。从所有的a中取数,这些数的按位或不能大于k,并且使得他们的b的和最大。
思路:有一点数位dp+贪心的思想,因为b都是大于零的,所以所有可以取得肯定都要取。另外考虑一个k的二进制为1001001100,如果可以形成一个形如1000111111的,那么1000011111、1000101111等都不会取,所以对于这个k,除了可以构成1001001100、1000111111、1001000111、1001001011以外的都不会取到。构造一下就好了。
题意:给定n个数,每个数有一个a值一个b值,一个k。从所有的a中取数,这些数的按位或不能大于k,并且使得他们的b的和最大。
思路:有一点数位dp+贪心的思想,因为b都是大于零的,所以所有可以取得肯定都要取。另外考虑一个k的二进制为1001001100,如果可以形成一个形如1000111111的,那么1000011111、1000101111等都不会取,所以对于这个k,除了可以构成1001001100、1000111111、1001000111、1001001011以外的都不会取到。构造一下就好了。
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 1e5+10; int a[maxn],b[maxn]; int main() { int n,k; scanf("%d%d",&n,&k); int res=0; for(int i=0;i<n;i++){ scanf("%d%d",&a[i],&b[i]); if((a[i]&k)==a[i]) res+=b[i]; } for(int i=30;i>=0;i--){ int tmp=1<<i; if(k&tmp){ int f=(k^tmp)|(tmp-1); int ans=0; for(int j=0;j<n;j++){ if((a[j]&f)==a[j]) ans+=b[j]; } res=max(res,ans); } } printf("%d\n",res); return 0; }
相关文章推荐
- AtCoder Tenka1 Programmer Beginner Contest 解题报告
- AtCoder. Tenka1 Programmer Contest C,D
- 【AtCoder】Tenka1 Programmer Contest(C - F)
- AtCoder Grand Contest 001 E - BBQ Hard 数学+dp
- AtCoder Beginner Contest 072
- 赛后总结AtCoder Beginner Contest 090(Beginner)
- AtCoder Beginner Contest 070
- AtCoder Beginner Contest 088 D Grid Repainting 【BFS】
- Tenka1 Programmer Contest D - IntegerotS
- (最短路)AtCoder Beginner Contest 061 D - Score Attack
- AtCoder Beginner Contest 075
- AtCoder Beginner Contest 087-D - People on a Line
- AtCoder Beginner Contest 059 C - Sequence(贪心)
- AtCoder AtCoder Beginner Contest 063 D - Widespread(二分)
- AtCoder AtCoder Beginner Contest 076 C: Dubious Document 2(set与字典序)
- AtCoder Regular Contest 093(AtCoder Beginner Contest 092)题解
- AtCoder Beginner Contest 088
- AtCoder AtCoder Beginner Contest 076 C: Dubious Document 2(set与字典序)
- AtCoder Beginner Contest 085 最后一题
- AtCoder Beginner Contest 071 D - Coloring Dominoes