Bessie hears that an extraordinary meteor shower is coming; reports say that these meteors will cras

这是自己关于poj3669写的一部分的代码,一直出错,然后就不想写了。不知道自己哪里错了

#include<stdio.h>

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;


int Map[305][305]={0}, m;
int dx[5]={0, 0, 0, 1, -1};
int dy[5]={0, 1, -1, 0, 0};
int time[305][305];
void f(int x, int y, int t);
struct zuo
{
    int x, y;
    int t;
}a[50005];
bool cmp(zuo a, zuo b)
{
    return a.t>b.t;
}
int main()
{
    int a1, a2, a3;
    int i, j;
    cin>>m;
    for(i=0; i<m; i++)
        cin>>a[i].x>>a[i].y>>a[i].t;
    sort(a, a+m, cmp);
    for(i=0; i<m; i++)
    {
        a1 = a[i].x; a2 = a[i].y; a3 = a[i].t;
        f(a1, a2, a3);
    }
    int maxx = a[0].x;
    int maxy = a[0].y;
    for(i=1; i<m; i++)
    {
        if(maxx <= a[i].x) maxx = a[i].x;
        if(maxy <= a[i].y) maxy = a[i].y;
    }
    int maxxy = max(maxx, maxy);
    for(i=0; i<m; i++)
        cout<<a[i].x<<"\t"<<a[i].y<<"\t"<<a[i].t<<endl;
    cout<<maxx<<"\t"<<maxy<<"\t"<<maxxy<<endl;
}
void f(int x, int y, int t)
{
    int i;
    for(i=0; i<5; i++)
    {
        Map[x+dx[i]][y+dy[i]] = 1;
        time[x+dx[i]][y+dy[i]] = t;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!根据题目描述,我们需要帮助 Bessie 计算最小成本逃生计划的数量,并且要对结果进行取模操作。为了解决这个问题,我们可以使用动态规划的方法来求解。 首先,我们定义一个二维数组 dp,其中 dp[i][j] 表示在位置 (i, j) 时的最小成本逃生计划数量。我们可以使用动态规划的思想进行状态转移。 根据题目要求,所有的牛必须聚集在同一个单元格中才能逃生,因此我们可以将问题分解为两个子问题: 1. 选择一个单元格 (i, j),使得牛能够聚集在该单元格中。 2. 计算到达单元格 (i, j) 的最小成本逃生计划数量。 对于第一个子问题,假设我们选择了单元格 (i, j) 作为聚集点,那么该单元格一定有一个入口单元格 (x, y),其中 (x, y) 是 (i, j) 的上方或左方单元格。因此,我们可以通过遍历所有可能的入口单元格来计算第二个子问题的结果。 对于第二个子问题,我们可以使用动态规划的方法进行求解。假设我们已经计算了 dp[x][y] 的结果,那么到达单元格 (i, j) 的最小成本逃生计划数量可以通过以下方式计算: 1. 如果 (i, j) 的上方单元格 (x, y) 存在,那么 dp[i][j] += dp[x][y]。 2. 如果 (i, j) 的左方单元格 (x, y) 存在,那么 dp[i][j] += dp[x][y]。 最后,我们需要遍历所有的单元格,找到其中最小成本逃生计划数量的最小值,并将结果对 10^9+7 取模。 下面是对应的 C++ 代码实现: ```cpp #include <iostream> #include <vector> using namespace std; const int MOD = 1e9 + 7; int countEscapePlans(vector<vector<int>>& gates) { int N = gates.size(); int K = gates[0].size(); vector<vector<int>> dp(N, vector<int>(K, 0)); // 初始化边界条件 dp[0][0] = 1; // 动态规划求解 for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { if (i > 0) { dp[i][j] += dp[i - 1][j]; dp[i][j] %= MOD; } if (j > 0) { dp[i][j] += dp[i][j - 1]; dp[i][j] %= MOD; } } } return dp[N - 1][K - 1]; } int main() { int N, K; cin >> N >> K; vector<vector<int>> gates(N, vector<int>(K, 0)); for (int i = 0; i < N; i++) { for (int j = 0; j < K; j++) { cin >> gates[i][j]; } } int result = countEscapePlans(gates); cout << result << endl; return 0; } ``` 这段代码首先读取了输入的矩阵大小,然后读取了矩阵中每个单元格的解锁成本。最后,将调用 `countEscapePlans` 函数计算最小成本逃生计划的数量,并输出结果。 希望这可以帮助到你!如果你有任何其他问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值