题目链接 完全背包
为什么这样写是错的
错误的代码:
#pragma GCC optimize(3)
#include <iostream>
#include <algorithm>
using namespace std;
#define int long long
#define endl "\n"
const int N=1010;
int v[N],w[N];
int dp[N][N];
void solve()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>v[i]>>w[i];
for(int i=1;i<=n;i++)
for(int j=v[i];j<=m;j++)
{
dp[i][j]=max(dp[i-1][j],dp[i][j-v[i]]+w[i]);
}
cout<<dp[n][m]<<endl;
return ;
}
signed main()
{
std::ios::sync_with_stdio(false);std::cin.tie(0);
solve();
return 0;
}
只错了最后一个数据
正确的代码
#pragma GCC optimize(3)
#include <iostream>
#include <algorithm>
using namespace std;
#define int long long
#define endl "\n"
const int N=1010;
int v[N],w[N];
int dp[N];
void solve()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>v[i]>>w[i];
for(int i=1;i<=n;i++)
for(int j=v[i];j<=m;j++)
{
dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
}
cout<<dp[m]<<endl;
return ;
}
signed main()
{
std::ios::sync_with_stdio(false);std::cin.tie(0);
solve();
return 0;
}