这次做了四道题
第一题
题目大意
求n^m次方的最后一位数
输入样例
2
3 4
4 5
输出样例
1
4
解题思路
其实这道题是用快速幂来做的,但不知道为什么会wa,一开始是时间超限,后来就wa了其实就是没AC
程序如下
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long sum,n,a,b;
int gg(long long x,long long y)
{
sum=1;
x%=10;//先取最后一位
while(y)
{
if(y%2==1) sum=sum*x;//如果余一就开始乘
x=x*x;
y>>=1;//看y的值
}
return sum%10;
}
int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a);
scanf("%lld",&b);
printf("%d\n",gg(a%10,b));
}
fclose(stdin);
fclose(stdout);
return 0;
}
第二题
题目大意
现在你规划一条路径,尽可能使小明到友军所在处后的体力值最大,这样小明才能有更多精力继续逃离。图上有输入为0表示这个点没有敌军也没有能量药丸,1表示该点上有敌军,2表示该点上有能量药丸。(数据保证小明所在的位置上不会出现能量药丸或敌军)
最后再输出一个正整数表示小明到友军所在处后体力的最大值
输入样例
5 5
0 1 1 1 1
0 1 2 1 0
0 2 0 1 1
0 0 2 0 0
0 0 0 0 0
输出样例
2
解题思路
这道题用(DP)动态规划来做,就不断的往下读入(也可以从上往下)再不断的计算走的最大的路径的体力
程序如下
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,m,a[505][505],s,f[505][505];
int main()
{
freopen("b.in","r",stdin);
freopen("b.out","w",stdout);
memset(f,-127/3,sizeof(f));//因为有负数
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%d",&a[i][j]);
if (a[i][j]==1) a[i][j]=-1;//预处理
if (a[i][j]==2) a[i][j]=1;//预处理
}
}
f[0][1]=0;//初值
f[1][0]=0;//初值
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
f[i][j]=a[i][j]+max(f[i-1][j],f[i][j-1]);//在边走时边判断最大的体力
}
}
printf("%d",f[n][m]);
fclose(stdin);
fclose(stdout);
return 0;
}
第三题
题目大意
他知道了每样物品的单价,以及他对每样物品的需求度(对于相同的物品,需求度可以累加),他想要花费至多N元钱使得他对所买物品的需求度和最大。
输入样例
4 5
5 3 0
5 3 1
4 4 0
2 3 0
3 2 1
输出样例
6
解题思路
其实这道题是分组背包加上完全背包,然而我没做出来到时做出来再亮出来
程序如下
第四题
题目大意
景点x到景点y有一条道路,且从景点x到景点y或从景点y到景点x需要z个单位时间,两个景点之间可能会有多条道路,表示用刚好m个单位时间到达终点最多能游览不同景点个数,若不能用刚好m个单位时间到达终点,则输出-1
输入样例
5 12 4
1 2 5
1 4 3
4 2 4
2 5 5
输出样例
4
解题思路
这题也没做出来,改出来再亮出来
谅解
程序如下