# 一维消消乐(简单dp)

这篇博客介绍了如何使用动态规划解决一维消消乐问题,玩家需在n颗价值各异(可能为负)的珠子中选择相邻珠子消除,得分基于两珠子价值乘积。珠子只能消除一次且会占用位置。
摘要由CSDN通过智能技术生成

一维消消乐(简单dp)

Tags : 动态规划


  • 题意:n 颗珠子,每颗有一个价值w_i(可能是负数),游戏规则:选择若干对相邻珠子
    ,让他们同事消去,分数为两个珠子价值乘积,珠子只能消去一次,消去的珠子还会占位
#include <iostream>
using namespace std;
const int maxn=10005;
int a[maxn];     //dp保存两种状态
int dp[maxn<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的C语言消消乐游戏的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define ROWS 6 #define COLS 6 // 游戏棋盘 char board[ROWS][COLS]; // 初始化游戏棋盘 void initBoard() { int i, j; for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { board[i][j] = 'A' + rand() % 6; // 随机生成A-F的字符 } } } // 打印游戏棋盘 void printBoard() { int i, j; for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { printf("%c ", board[i][j]); } printf("\n"); } } // 消除相同连续的字符 bool eliminate() { bool eliminated = false; int i, j; // 横向消除 for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS - 2; j++) { if (board[i][j] == board[i][j + 1] && board[i][j] == board[i][j + 2]) { board[i][j] = board[i][j + 1] = board[i][j + 2] = ' '; eliminated = true; } } } // 纵向消除 for (j = 0; j < COLS; j++) { for (i = 0; i < ROWS - 2; i++) { if (board[i][j] == board[i + 1][j] && board[i][j] == board[i + 2][j]) { board[i][j] = board[i + 1][j] = board[i + 2][j] = ' '; eliminated = true; } } } return eliminated; } // 下落消除后的字符 void drop() { int i, j, k; // 横向下落 for (i = ROWS - 1; i >= 0; i--) { for (j = 0; j < COLS; j++) { if (board[i][j] == ' ') { for (k = i - 1; k >= 0; k--) { if (board[k][j] != ' ') { board[i][j] = board[k][j]; board[k][j] = ' '; break; } } } } } } // 判断游戏是否结束 bool isGameOver() { int i, j; // 判断横向是否有连续三个相同的字符 for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS - 2; j++) { if (board[i][j] == board[i][j + 1] && board[i][j] == board[i][j + 2]) { return false; } } } // 判断纵向是否有连续三个相同的字符 for (j = 0; j < COLS; j++) { for (i = 0; i < ROWS - 2; i++) { if (board[i][j] == board[i + 1][j] && board[i][j] == board[i + 2][j]) { return false; } } } return true; } int main() { initBoard(); printf("Welcome to the Simple Bejeweled Game!\n\n"); printBoard(); printf("\n"); while (!isGameOver()) { if (eliminate()) { drop(); } printBoard(); printf("\n"); } printf("Game Over!\n"); return 0; } ``` 这个简易的消消乐游戏使用6x6的棋盘,棋盘上的字符为A-F,连续出现三个相同的字符时消除并下落。游戏结束条件是没有连续三个相同的字符。你可以根据需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值