Day 22
目录
- 1.旋转字符串
- 1.1 解析
- 1.2 代码
- 2.NC51 合并k个已排序的链表
- 2.1 解析
- 2.2 代码
- 3.DP18 滑雪
- 3.1 解析
- 3.2 代码
1.旋转字符串
旋转字符串
1.1 解析
1.2 代码
bool solve(string A, string B) {if(A.size()!=B.size())return false; //开始字符串长度不相同,就不用找了return (A+A).find(B)!=-1;}
2.NC51 合并k个已排序的链表
NC51 合并k个已排序的链表
2.1 解析
2.2 代码
struct cmp{bool operator()(ListNode* cur1,ListNode* cur2){return cur1->val>cur2->val;}};ListNode* mergeKLists(vector<ListNode*>& lists) {int n=lists.size();priority_queue<ListNode*,vector<ListNode*>,cmp> heap;//创建小根堆for(int i=0;i<n;i++){if(lists[i]!=nullptr)heap.push(lists[i]);}//创建头节点+尾指针ListNode* head=new ListNode(0),*tail=head;while(heap.size()){auto tmp=heap.top();heap.pop();if(tmp->next)heap.push(tmp->next);tail->next=tmp;tail=tail->next;}tail=head->next;delete head;return tail;}
3.DP18 滑雪
DP18 滑雪
记忆化搜索
3.1 解析
3.2 代码
#include <iostream>
using namespace std;int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int n,m;
int arr[110][110];
int memo[110][110];//备忘录int dfs(int i,int j)
{if(memo[i][j])return memo[i][j];//先看备忘录int len=1;for(int k=0;k<4;k++){int x=i+dx[k],y=j+dy[k];if(x>=1&&x<=n&&y>=1&&y<=m&&arr[x][y]<arr[i][j]){len=max(1+dfs(x,y),len);}}memo[i][j]=len;//加入到备忘录中return len;
}
int main()
{cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>arr[i][j];}}int ret=1;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){ret=max(ret,dfs(i,j));}}cout<<ret<<endl;return 0;
}