Day 20
目录
- 1.MT8 奇数位丢弃
- 1.1 解析
- 1.2 代码
- 2.求和
- 2.1 解析
- 2.2 代码
- 3.HJ52 计算字符串的编辑距离
- 3.1 解析
- 3.2 代码
1.MT8 奇数位丢弃
MT8 奇数位丢弃
1.1 解析
1.2 代码
#include <iostream>
using namespace std;int main()
{int n=0;while(cin>>n){int ret=1;while(ret-1<=n)ret*=2;cout<<(ret/2-1)<<endl;}return 0;
}
2.求和
求和
dfs、搜索、递归
2.1 解析
2.2 代码
#include <iostream>
using namespace std;
int n,m;
bool vis[11];
int sum;//路径和
void dfs(int x)
{if(sum==m)//满足条件{for(int i=0;i<=n;i++){if(vis[i])cout<<i<<' ';}cout<<endl;return;}if(sum>m||x>n)return;//剪枝//选sum+=x;vis[x]=true;dfs(x+1);sum-=x;//恢复现场vis[x]=false;//不选dfs(x+1);
}
int main()
{cin>>n>>m;dfs(1);
}
3.HJ52 计算字符串的编辑距离
HJ52 计算字符串的编辑距离
动态规划
3.1 解析
3.2 代码
#include <iostream>
using namespace std;
#include <vector>
#include <string>int main()
{string a,b;cin>>a>>b;int n=a.size(),m=b.size();//创建dp表vector<vector<int>> dp(n+1,vector<int>(m+1));//初始化for(int j=1;j<=m;j++)dp[0][j]=j;for(int i=1;i<=n;i++)dp[i][0]=i;//填表int ret=1e9;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i-1]==b[j-1])dp[i][j]=dp[i-1][j-1];else dp[i][j]=min(dp[i-1][j],min(dp[i][j-1],dp[i-1][j-1]))+1;}}cout<<dp[n][m]<<endl;return 0;
}