1.买不到的数目
记住公式即可
#include <bits/stdc++.h>
using namespace std;
int main()
{
int p,q;
cin>>p>>q;
printf("%d\n",p*q-q-p);
return 0;
}
2.蚂蚁感冒
分情况讨论,最终代码可以合二为一的写
#include <bits/stdc++.h>
using namespace std;
const int N=55;
int n;
int x[N];
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>x[i];
int left=0,right=0;//分别表示右边向左走和左边向右走的蚂蚁数量
for(int i=1;i<n;i++)//统计上述两种蚂蚁数量
if(abs(x[i])<abs(x[0])&&x[i]>0) left++;
else if(abs(x[i])>abs(x[0])&&x[i]<0) right++;
if(x[0]>0&&right==0||x[0]<0&&left==0) cout<<1<<endl;
else cout<<left+right+1<<endl;
return 0;
}
3.饮料换购
简单数学题
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int res=n;
while(n>=3)
{
res+=n/3;
n=n/3+n%3;
}
cout<<res<<endl;
return 0;
}
4.摘花生
简单DP,也是我第一次自己写出来的DP
#include <bits/stdc++.h>
using namespace std;
const int N=105;
int a[N][N];
int f[N][N];
int n,m;
int T;
int main()
{
cin>>T;
while(T--)
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) cin>>a[i][j];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
f[i][j]=max(f[i][j-1],f[i-1][j])+a[i][j];
}
}
cout<<f[n][m]<<endl;
}
return 0;
}
5.地宫寻宝
多维DP,十分新鲜;数据较大,每次加一个都要先取模
#include <bits/stdc++.h>
using namespace std;
const int N=55,MOD=1e9+7;
int n,m,k;
int w[N][N];
int f[N][N][13][14];
int main()
{
cin>>n>>m>>k;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) {cin>>w[i][j];w[i][j]++;}
f[1][1][1][w[1][1]]=1;
f[1][1][0][0]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(i==1&&j==1) continue;
for(int u=0;u<=k;u++)
for(int v=0;v<=13;v++)
{
int &val=f[i][j][u][v];
val=(val+f[i-1][j][u][v])%MOD;
val=(val+f[i][j-1][u][v])%MOD;
if(u>0&&v==w[i][j])
{
for(int c=0;c<v;c++)
{
val=(val+f[i-1][j][u-1][c])%MOD;
val=(val+f[i][j-1][u-1][c])%MOD;
}
}
}
}
}
int res=0;
for(int i=0;i<=13;i++) res=(res+f[n][m][k][i])%MOD;
cout<<res<<endl;
return 0;
}
6.波动数列
被层层剥开,转化成数学问题的DP
#include <bits/stdc++.h>
using namespace std;
int n,s,a,b;
const int N=1005,mod=1e8+7;
int f[N][N];
int get_mod(int a ,int b)//a%b的正余数
{
return (a%b+b)%b;
}
int main()
{
cin>>n>>s>>a>>b;
f[0][0]=1;
for(int i=1;i<=n;i++)
for(int j=0;j<n;j++)//余数从0~n-1
{
f[i][j]=(f[i-1][get_mod(j-i*a,n)]+f[i-1][get_mod(j+i*b,n)])%mod;
}
cout<<f[n-1][get_mod(s,n)]<<endl;
return 0;
}