完整教程:旅游城市数量最大化 01背包问题

题目描述
求一个人去旅游能到达的最多的城市。

输入格式
第一行为输入的样例组数T TT。

接着为n nn,m mm(n nn为这个人旅行的总天数,m mm为计划旅行的总城市数)。

接下来一行为一个整数数组d [ i ] d[i]d[i], 每一位依次表示游览每个城市所需的天数。

输出格式
输出一个整数,表示能到达的最多的城市数量。

输入样例
1
5 3
2 1 3
1
2
3
输出样例
2

代码:

#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
#include <cstring>
#include <cmath>
#define MX 100000005
using namespace std;
//背包障碍
int t,n,m,d[MX];
int dp[MX];
int main() {
cin>>t;
cin>>n>>m;
for(int i = 1;i <= m;i++)
{
cin>>d[i];
}
dp[0] = 0;
for(int i = 1;i <= m;i++)
{
for(int j = n;j >= d[i];j--)
{
dp[j] = max(dp[j],dp[j-d[i]] + 1);
}
}
cout<<dp[n]<<endl;
return 0;
}

posted @ 2025-08-05 11:50  wzzkaifa  阅读(8)  评论(0)    收藏  举报