小红书2020校招测试开发&后端笔试题卷三

小红书2020校招测试开发&后端笔试题卷三_第1张图片

 //完全背包求组合数

#include 
#include
#include
#include
#include
using namespace std;
int value[300];
// vectorvis;
// vectorvis1;
map,int>mp;
// set>se;
int num=0;
int res=0;
int a[1000];

int dp[50000];
int main() {
      int n;
      scanf("%d",&n);
      getchar();
      
      char c=getchar();
      while(c!=']'){
         scanf("%d",&value[num++]);
         c=getchar();
      }
      dp[0]=1;
      //求组和,完全背包
      for(int i=0;i

小红书2020校招测试开发&后端笔试题卷三_第2张图片

 

#include 
#include
using namespace std;
string res;
stackkuo;
int main() {
   string s;
   cin>>s;
   int id=0;
   for(int i=0;i0){
                    res.pop_back();
                }
            }
        }

   }
   cout<

小红书2020校招测试开发&后端笔试题卷三_第3张图片

 

#include 
using namespace std;
int dp[1005];
int num[1005];
int a[1005];
int main() {
    //dp[i]表示从前i篇笔记获得的最大点赞数
    int n;
    scanf("%d",&n);
    dp[0]=0;
    for(int i=0;idp[i-1])
        num[i]=num[i-2]+1;
        else if(dp[i-2]+a[i]==dp[i-1]){
            num[i]=min(num[i-1],num[i-2]+1);
        }
        else{
            num[i]=num[i-1];
        }
        
    }
    int max_value=dp[n-1];
    printf("%d %d\n",dp[n-1],num[n-1]);
    return 0;
}
// 64 位输出请用 printf("%lld")

小红书2020校招测试开发&后端笔试题卷三_第4张图片

题解:贪心维护第一个值的升序,然后对第二个值用LIS(二分+dp),不然会爆,注意第一个值>=,第二个值要严格递增,要不然过不了

#include 
#include
#include
#include
using namespace std;
struct Node{
    int x;
    int h;
}node[1000004];

bool cmp(Node a,Node b)
{
    
    if(a.xdp[res])
        {
            dp[++res]=node[i].h;

        }
        else{
            dp[binary_search(res,node[i].h)]=node[i].h;
        }
        // printf("%d %d\n",node[i].x,node[i].h);
    }
    printf("%d\n",res);
    return 0;

}
// 64 位输出请用 printf("%lld")

 

你可能感兴趣的:(图论,算法)