解题思路:

                看到这题题解居然都用的动态规划包括优质题解,大哥不要误导别人啊,明明几分钟就做出来了。
                具体思路 贪心

                for(i从0遍历到k-1)

                比如 如果要选i号积分的兄dei,那么(i+2k),(i+4k)...(i+2*N*k)的兄dei就全部留下,  (i+k+2*N*k)的朋友就全部扔了。 如果不选i号的兄dei,那就反之。 然后看这两个哪个大,就加到ans上面去

                具体请研究代码
注意事项:
       
参考代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#define RI(a) scanf("%d",&a);
#define _for(i,a,b) for(int i=a;i<b;i++)
using namespace std;
typedef long long LL;

int n,k,a[100005],x;
LL ans=0;
int main() {
    RI(n);RI(k);
    _for(i,0,n){
    	RI(x);
    	if(!k&&!a[x])ans++; //一条代码处理k==0情况
    	a[x]++;
    }
    _for(i,0,k){
    	LL cnt1=0,cnt2=0;
    	for(int j=i,f=0;j+k<100002;j+=k,f=1-f){
    		if(f)cnt1+=a[j];
    		else cnt2+=a[j];
    	}
    	ans+=max(cnt1,cnt2);
    }
    printf("%d\n",ans);
}


 

0.0分

2 人评分

  评论区

这样只是比较1,3,5,7,9和2,4,6,8,10,但最大的可能是1,4,6,8,10
2019-04-17 18:17:06
  • «
  • 1
  • »