#移动字母【模拟】
class Solution {
public:
/**
*
* @param s string字符串
* @return string字符串
*/
string change(string s) {
// write code here
string ans;
int cnt=0;
for(int i=0;i<s.size();i++)
if(s[i]!='a') ans+=s[i];
else cnt++;
for(int i=0;i<cnt;i++) ans+='a';
return ans;
}
};
魔法数字【bfs】
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型 表示牛牛的数字
* @param m int整型 表示牛妹的数字
* @return int整型
*/
int bfs(int n,int m)
{
int a[20100]={0};
memset(a,-1,sizeof a);
a[n]=0;
queue<int>q; q.push(n);
while(q.size())
{
int u=q.front(); q.pop();
//cout<<u<<endl;
if(u==m)
{
return a[u];
}
if(a[u-1]==-1 && u-1>=-1e4)
{
q.push(u-1);
a[u-1]=a[u]+1;
}
if(a[u+1]==-1 && u+1<= 1e4)
{
q.push(u+1);
a[u+1]=a[u]+1;
}
if(a[u*u] ==-1 && u*u<=1e4)
{
q.push(u*u);
a[u*u]=a[u]+1;
}
}
return -1;
}
int solve(int n, int m) {
// write code here
int t=bfs(n,m);
return t;
}
};
牛妹的春游【变种0/1背包】
class Solution {
public:
/**
*
* @param breadNum int整型
* @param beverageNum int整型
* @param packageSum int整型vector<vector<>> 每个一维数组中有三个数,依次表示这个包装里面的面包数量、饮料数量、花费
* @return int整型
*/
int f[2010][2010];
int minCost(int breadNum, int beverageNum, vector<vector<int> >& packageSum) {
memset(f,0x3f,sizeof f);
f[0][0]=0;
for(int z=0;z<packageSum.size();z++)
{
int u=packageSum[z][0],v=packageSum[z][1],w=packageSum[z][2];
for(int i=breadNum;i>=0;i--)
for(int j=beverageNum;j>=0;j--)
f[i][j]=min(f[i][j],f[max(i-u,0)][max(j-v,0)]+w);
}
return f[breadNum][beverageNum];
}
};