Day 24
目录
- 1.天使果冻
- 1.1 解析
- 1.2 代码
- 2.dd爱旋转
- 2.1 解析
- 2.2 代码
- 3.DP40 小红取数
- 3.1 解析
- 3.2 代码
1.天使果冻
天使果冻
动态规划
1.1 解析
1.2 代码
#include <iostream>
using namespace std;const int N=1e5+10;
int arr[N]={0};
int f[N],g[N];//创建dp表
int main()
{int n,q;cin>>n;for(int i=0;i<n;i++)cin>>arr[i];f[0]=arr[0];g[0]=-0x3f3f3f3f;for(int i=1;i<n;i++){f[i]=max(f[i-1],arr[i]);if(arr[i]>=f[i-1]) g[i]=f[i-1];else if(f[i-1]>arr[i]&&arr[i]>=g[i-1]) g[i]=arr[i];else g[i]=g[i-1];}cin>>q;while(q--){int x;cin>>x;cout<<g[x-1]<<endl;}return 0;
}
2.dd爱旋转
dd爱旋转
模拟
2.1 解析
2.2 代码
#include <iostream>
using namespace std;
#include <vector>
// 行镜像
void RowMirr(vector<vector<int>>& arr)
{int n=arr.size();int l=0,r=n-1;while(l<r){int tmp;for(int j=0;j<n;j++){tmp=arr[l][j];arr[l][j]=arr[r][j];arr[r][j]=tmp;}++l;--r;}
}
//列镜像
void ColMirr(vector<vector<int>>& arr)
{int n=arr.size();for(int i=0;i<n;i++){int l=0,r=n-1,tmp;while(l<r){tmp=arr[i][l];arr[i][l]=arr[i][r];arr[i][r]=tmp;++l;--r;}}
}
int main()
{int n;cin>>n;vector<vector<int>> arr(n,vector<int>(n));for(int i=0;i<n;i++){for(int j=0;j<n;j++)cin>>arr[i][j];}int q,row=0,col=0;cin>>q;while(q){int x;cin>>x;if(x==1){row+=1;col+=1;}else row+=1;q--;}row%=2;col%=2;if(row)RowMirr(arr);if(col)ColMirr(arr);//打印for(int i=0;i<n;i++){for(int j=0;j<n;j++){cout<<arr[i][j]<<' ';}cout<<endl;}return 0;
}
3.DP40 小红取数
DP40 小红取数
同余定理+01背包
3.1 解析
3.2 代码
#include <iostream>
using namespace std;
#include <vector>
#include <cstring>const int N=1010;
long long a[N];
long long dp[N][N];
int main()
{int n,k;cin>>n>>k;vector<long long> a(n+1);for(int i=1;i<=n;i++)cin>>a[i];//创建dp表//vector<vector<long long>> dp(n+1,vector<long long>(k,-1));memset(dp,-0x3f,sizeof(dp));dp[0][0]=0;for(int i=1;i<=n;i++){for(int j=0;j<k;j++){dp[i][j]=max(dp[i-1][j],dp[i-1][(j-a[i]%k+k)%k]+a[i]);}}if(dp[n][0]<1)cout<<-1<<endl;else cout<<dp[n][0]<<endl;return 0;
}