转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove
大好的涨rate机会,又被浪费了。
250PT:有多少个不同的数*某个数的最多个数,结果把变量名写错了
class KingdomAndDucks{
public:
int minDucks(vector <int> duckTypes){
int cnt[51],ans=0,tmp=1;
memset(cnt,0,sizeof(cnt));
for(int i=0;i<duckTypes.size();i++)
if(cnt[duckTypes[i]]==0){
ans++;
cnt[duckTypes[i]]++;
}
else{
cnt[duckTypes[i]]++;
tmp=max(tmp,cnt[duckTypes[i]]);
}
return ans*tmp;
}
};
500PT:有一个数列,每个数可以加上或者减去X以内的数,使数列变成严格递增的数列,最小的X。
二分,然后判断是否满足答案,遍历一次,每次使每个数尽可能的小,判断是否满足严格递增。
class KingdomAndTrees{
public:
int minLevel(vector <int> heights){
int low=0,high=1000000005,mid,h;
while(low<=high){
mid=(low+high)/2;
bool flag=true;
for(int i=0;i<heights.size();i++)
if(i==0)
h=max(1,heights[0]-mid);
else{
if(heights[i]+mid<=h){
flag=false;
break;
}
h=max(heights[i]-mid,h+1);
}
if(flag)
high=mid-1;
else
low=mid+1;
}
return low;
}
};
1000PT:怒撸搜索,加了各种剪枝,结果还是没过,据说是背包?有待研究