首页 > 其他 > 详细

P1097-P1099

时间:2020-09-09 18:53:26      阅读:95      评论:0      收藏:0      [点我收藏+]
//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 <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;
}

P1097-P1099

原文:https://www.cnblogs.com/Chri-K/p/13640290.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!