作业介绍
都是后面的算法题目,除了第一题稍微简单,后面两题都比较难。
第二题一杯柠檬水,第三题一杯奶茶!
摘花生
#include <bits/stdc++.h>
using namespace std;
int a[105][105];
int main() {
int t;
cin >> t;
int n,m;
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++){
//如果是第一行
//如果是第二行
//看左边过来更多花生,还是上边过来最多花生?
}
}
cout << a[n][m]<<endl;
}
return 0;
}
方格取数
using namespace std;
const int N=15;
int w[N][N];
//f[k][i1][i2]中的i1表示第一条路走到了i1行
//f[k][i1][i2]中的i2表示第二条路走到了i2行
//k表示每条路的(i1,j1)点中的i1+j1,同时也是i2+j2
//由于是同时走,所以k是一样的
int f[N*2][N][N];
int n;
int a,b,c;
int main(){
scanf("%d", &n);
while(cin >> a >> b >> c, a||b||c) w[a][b] = c;
for(int k=2; k<=n*2; k++){
for(int i1=1; i1<=n; i1++){
for(int i2=1; i2<=n; i2++){
int j1=k-i1, j2=k-i2;
if(j1>=1 && j1<=n && j2>=1 && j2<=n){
int t = w[i1][j1];
//如果(i1,j1),(i2,j2)不是一个点,说明两个点的花生都可以取,加上
if(i1 != i2) t += w[i2][j2];
int &x = f[k][i1][i2];
//下下
x = max(x, f[k-1][i1-1][i2-1] + t);
//右下
x = max(x, f[k-1][i1][i2-1] + t);
//下右
x = max(x, f[k-1][i1-1][i2] + t);
//右右
x = max(x, f[k-1][i1][i2] + t);
}
}
}
}
printf("%d\n", f[n+n][n][n]);
return 0;
}
- 状态
- 已结束
- 题目
- 3
- 开始时间
- 2023-10-28 0:00
- 截止时间
- 2023-11-5 23:59
- 可延期
- 24 小时