找AI问的题目(好像是leetcode上的):

题目名称:打家劫舍

题目描述: 你是一个职业强盗,打算沿街打劫房屋。每间房子都固定金钱数量,但是相邻的房子有防盗系统,如果两间相邻的房子在同一晚上被强盗闯入,系统会自动报警。

目标: 计算在不触动警报的情况下,一夜之内能够偷窃到的最多金额。

输入格式: 第一行包含一个整数 n,表示房屋的数量。 第二行包含 n 个整数,表示每个房屋存放的金额。

输出格式: 一个整数,表示能够偷窃到的最多金额。

约束条件: 1 <= n <= 100 每个房屋存放的金额在 1 到 1000 之间。

输入:

5
1 2 3 1 2

输出:

6

解析: 在偷1 3 5号房子时能偷到最多钱

代码(自编 性能没有AI的好 但是能用):

#include<stdio.h>
#include<vector>

using namespace std;

int n;
vector <int> money;

int max_money() {

	vector <int> dp(n, 0);
	dp[0] = money[0],dp[1] = money[1];
	
	for(int i = 2; i < n; ++i){
		
		for(int t = 1; t < i; ++t){
			
			dp[i] = max(dp[t], dp[i - 2] + money[i]);
		}
	}
	
	return dp[n - 1];
}

int main() {

	scanf("%d",&n);

	for(int i = 0; i < n; ++i) {

		int r;
		scanf("%d",&r);

		money.push_back(r);
	}

	printf("%d",max_money());

	return 0;
}

AI代码:

#include <iostream>
#include <vector>
#include <algorithm>  // For std::max

using namespace std;

void rob(vector<int>& nums) {
    int n = nums.size();
    if (n == 0) {cout << 0;return;}
    if (n == 1) {cout << nums[0];return;}

    vector<int> dp(n, 0);
    dp[0] = nums[0];
    dp[1] = max(nums[0], nums[1]);

    for (int i = 2; i < n; i++) {
        dp[i] = max(dp[i-1], dp[i-2] + nums[i]);
    }

    cout << dp[n-1];
}

int main() {
    int n;
    cin >> n;

    vector<int> nums(n);

    for (int i = 0; i < n; i++) {
        cin >> nums[i];
    }

    rob(nums);

    return 0;
}

注释: max和min函数严格意义上是定义在algobase库里的 而vector库包含了这个库 因此其实并不需要导入algorithm库

2 comments

  • 1