目录
064:添加字符
065:数组变换
066:装箱问题
064:添加字符
添加字符_牛客笔试题_牛客网 (nowcoder.com)
题目:
题解:
枚举所有A,B字符串可能的对应位置,得出对应位置不同字符数量的最小情况
两字符串的字符数量差n-m,长字符串可从 [0,n-m] 位置作为起始下标。
#include <iostream>
#include<algorithm>
#include<string>
using namespace std;
string A,B;
int main()
{cin>>A>>B;int m=A.size(), n=B.size();int ret=50;for(int i=0;i<=n-m;i++){int tmp=0;for(int j=0;j<m;j++){if(B[i+j]!=A[j]) //不改变i的情况,A,B一起向后遍历{tmp++;}}ret=min(tmp,ret);}cout<<ret<<endl;return 0;
}
065:数组变换
数组变换__牛客网 (nowcoder.com)
题目:
题解:
将数组排序后由大到小遍历,取相邻两个。将较小的值不断乘以2,如果某次结果等于较大的值,则符合条件继续向后取相邻两个数,如果不断乘以2最后只会大于较大的值时,则整个数组不符合条件。
#include <iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
LL arr[51];
int n;
int main()
{cin>>n;for(int i=0;i<n;i++){cin>>arr[i];}sort(arr,arr+n);int i=n-1;for(;i>0;i--){while(arr[i-1]<arr[i]){arr[i-1]*=2;}if(arr[i-1]==arr[i]){continue;}else{break;}}if(i==0) cout<<"YES"<<endl;else cout<<"NO"<<endl;return 0;
}
066:装箱问题
[NOIP2001]装箱问题 (nowcoder.com)
题目:
题解:
01背包简单应用:
#include<iostream>using namespace std;
int V,n;
int arr[31],dp[31][20010]={0};int main()
{cin>>V>>n;for(int i=1;i<=n;i++)//从下标1开始,方便dp边界填表{cin>>arr[i];}for(int i=1;i<=n;i++){for(int j=0;j<=V;j++){dp[i][j]=dp[i-1][j];if(j>=arr[i]){dp[i][j]=max(dp[i][j],dp[i-1][j-arr[i]]+arr[i]);}}}cout<<(V-dp[n][V])<<endl;return 0;
}//优化空间版
#include<iostream>using namespace std;
int V,n;
int arr[31],dp[20010]={0};int main()
{cin>>V>>n;for(int i=1;i<=n;i++)//从下标1开始,方便dp边界填表{cin>>arr[i];}for(int i=1;i<=n;i++){for(int j=V;j>=arr[i];j--){dp[j]=max(dp[j],dp[j-arr[i]]+arr[i]);}}cout<<(V-dp[V])<<endl;return 0;
}