A 牛牛选物
解题思路:n<=20,2^20属于1e6级别大小,所以用01表示选不选物品然后枚举找到符合条件的最大值即可。

int Maximumweight(vector<int>& v, vector<int>& g, int V) {
        // write code here
        int mx=-1,n=v.size();
        for(int i=0;i<1<<n;++i){
            int j=0,sv=0,sg=0,p=i;
            while(p>0){
                sv+=p%2*v[j],sg+=p%2*g[j];
                j++;
                p/=2;
            }
            if(sv==V)mx=max(mx,sg);
        }
        return mx;
    }

B 牛牛与字符串2
解题思路:s.size()<=10^6,所以直接从最长的n-1长度进行比较即可。

int solve(string s) {
        // write code here
        int n=s.size(),i=0,k=n-1;
        for(k=n-1;k>0;--k){
            int j=n-i-k,m=k;
            while(s[i]==s[j]&&m--)i++,j++;
            if(m)i=0;//如果k长度不满足就从头开始
            else return k;
        }
        return -1;
    }