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;}
浙公网安备 33010602011771号