P1102-P1103
//01背包
// #include <iostream>
// #include <algorithm>
// using namespace std;
// int tim[101];
// int val[101];
// int f[1001];
// int main()
// {
// int t,m;
// cin >> t >> m;
// for(int i = 0; i < m; i++)
// {
// cin >> tim[i] >> val[i];
// }
//
// for(int i = 0; i < m; i++)
// {
// for(int v = t; v >= tim[i]; v--)
// {
// if(f[v - tim[i]] + val[i] > f[v])
// {
// f[v] = f[v - tim[i]] + val[i];
// }
// }
// }
// cout << f[t];
// return 0;
// }
//还是超内存。。。(背包总是超)
// #include<iostream>
// using namespace std;
// int main()
// {
// int n,m;
// cin>>n>>m;
// int v,p;
// int dp[30001];
// for(int i=1;i<=m;i++)
// {
// cin>>v>>p;
// for(int j=n;j>=v;j++)
// {
// dp[j]=max(dp[j],dp[j-v]+p*v);
// }
// }
// cout<<dp[n]<<endl;
// return 0;
// }
//正确答案
#include<cstdio>#include<algorithm>#define V 30010using namespace std;int dp[V],w[30],v[30],n,m;int main(){int a,b;scanf("%d%d",&n,&m);for (int i=1;i<=m;i++){scanf("%d%d",&a,&b);v[i]=a;w[i]=a*b;}for (int j=0;j<=n;j++)dp[j]=0;for (int i=1;i<=m;i++)for (int j=n;j>=0;j--)if (j-v[i]>=0)dp[j]=max(dp[j],dp[j-v[i]]+w[i]);printf("%d",dp[n]);return 0;}
浙公网安备 33010602011771号