社区讨论

神奇的程序

P4170[CQOI2007] 涂色参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mia6hdlx
此快照首次捕获于
2025/11/22 19:00
3 个月前
此快照最后确认于
2025/11/22 20:28
3 个月前
查看原帖
只过了5#,但把答案减1是60分,减2是30分。
CPP
#include <bits/stdc++.h>
using namespace std;
int dp[52][52];
char wood[53];

int solve1(int front, int back) {
	if (dp[front][back] != 0) {
		return dp[front][back];
	}
	if (back - front == -1)
		return 0;
	if (back == front)
		return 1;
	if (wood[front] == wood[back]) {
		dp[front][back] = solve1(front + 1, back - 1) + 1;
	}
	if (dp[front][back] == 0) {
		dp[front][back] = 1000000;
	}
	for (int i = 0; i < back - front; i++) {
		dp[front][back] = min(dp[front][back], solve1(front, front + i) + solve1(front + i + 1, back));
	}
	return dp[front][back];
}
int main() {
    // 初始化 dp 数组
    memset(dp, 0, sizeof(dp));

    // 使用 getline 读取整行输入
    string input;
    getline(cin, input);
    int a = 0;
    for(int i = 0;i < input.size();i++) {
        wood[a] = input[i];
		if (wood[a] > 'Z' || wood[a] < 'A') {
			a--;
			break;
		}
		if (wood[a - 1] == wood[a++]) {
			--a;
		}
	}
	cout << solve1(0, a);
}

回复

1 条回复,欢迎继续交流。

正在加载回复...