P1097-P1099
//01背包
#include<iostream>
using
namespace
std;
int
main()
{
int
v,n;
cin>>v>>n;
int
w,c;
int
dp[1010];
for
(
int
i=1;i<=n;i++)
{
cin>>w>>c;
for
(
int
j=v;j>=w;j--)
{
dp[j]=max(dp[j],dp[j-w]+c);
}
}
cout<<dp[v]<<endl;
return
0;
}
//超内存。。。完全背包
// #include<iostream>
// using namespace std;
// int main()
// {
// long long v,n;
// cin>>v>>n;
// long long w;
// long long dp[100010];
// dp[0]={1};
// for(long long i=1;i<=v;i++)
// {
// cin>>w;
// for(long long j=w;j<=n;j++)
// {
// dp[j]=dp[j]+dp[j-w];
// }
// }
// if(n==0&&v==0)
// {
// cout<<0;
// }
// else
// {
// cout<<dp[n]<<endl;
// }
// return 0;
// }
//正解
// #include<iostream>
// using namespace std;
// int main()
// {
// long long v,n;
// cin>>v>>n;
// long long w;
// long long dp[100010];
// dp[0]={1};
// for(long long i=1;i<=v;i++)
// {
// cin>>w;
// for(long long j=w;j<=n;j++)
// {
// dp[j]=dp[j]+dp[j-w];
// }
// }
// if(n==0&&v==0)
// {
// cout<<0;
// }
// else
// {
// cout<<dp[n]<<endl;
// }
// return 0;
// }
//正解
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <utility>
using
namespace
std;
int
m,n,we[40],jz[40],dp[300],maxn;
int
main()
{
scanf
(
"%d%d"
,&m,&n);
for
(
int
i = 1;i <= n;i++)
scanf
(
"%d%d"
,&we[i],&jz[i]);
for
(
int
i = 1;i <= n;i++)
for
(
int
j = we[i];j <= m;j++)
dp[j] = max(dp[j],dp[j - we[i]] + jz[i]);
for
(
int
i = 1;i <= m;i++)
maxn = max(maxn,dp[i]);
printf
(
"max=%d"
,maxn);
return
0;
}
//完全背包,又超内存。。。
//正解
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <queue>
using
namespace
std;
int
v,n,sz[30];
long
long
dp[11000];
void
swork()
{
for
(
int
i = 1;i <= v;i++)
{
for
(
int
j = 1;j <= n;j++)
{
if
(j - sz[i] >= 0)dp[j] = dp[j - sz[i]] + dp[j];
}
}
}
int
main()
{
scanf
(
"%d%d"
,&v,&n);
for
(
int
i = 1;i <= v;i++)
scanf
(
"%d"
,&sz[i]);
dp[0] = 1;
swork();
printf
(
"%lld\n"
,dp[n]);
return
0;
}