华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: admin
打印 上一主题 下一主题

P1060 开心的金明

[复制链接]

50

主题

215

帖子

619

积分

高级会员

Rank: 4

积分
619
11#
发表于 2018-7-15 09:56:13 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. int m,n,v[30],w[30],f[30][30010];
  4. int i,j;
  5. int main()
  6. {
  7.     cin>>n>>m;
  8.     for(i=1;i<=m;i++)
  9.         cin>>v[i]>>w[i];
  10.     for(i=1;i<=m;i++)
  11.     {
  12.         for(j=1;j<=n;j++)
  13.         {
  14.             f[i][j]=f[i-1][j];
  15.             if(j>=v[i])
  16.                 f[i][j]=max(f[i][j],f[i-1][j-v[i]]+v[i]*w[i]);
  17.         }
  18.     }
  19.     cout<<f[m][n];
  20.     return 0;
  21. }
复制代码
回复 支持 反对

使用道具 举报

0

主题

31

帖子

94

积分

注册会员

Rank: 2

积分
94
12#
发表于 2018-7-27 20:52:54 | 只看该作者
  1. #include<cstdio>
  2. int max(int a,int b)
  3. {
  4.     if(a>=b)
  5.     {
  6.         return a;
  7.     }
  8.     else
  9.     {
  10.         if(a<b)
  11.         {
  12.             return b;
  13.         }
  14.     }
  15. }
  16. int n,m;
  17. int c[26],w[26];
  18. int f[30001];
  19. int main()
  20. {
  21.     scanf("%d%d",&n,&m);
  22.     for(int i=1;i<=m;i++)
  23.     {
  24.         scanf("%d%d",&c[i],&w[i]);
  25.     }
  26.     for(int i=1;i<=m;i++)
  27.     {
  28.         w[i]=c[i]*w[i];
  29.     }       
  30.     for(int i=1;i<=m;i++)
  31.     {
  32.         for(int j=n;j>=c[i];j--)
  33.         {
  34.             f[j]=max(f[j],f[j-c[i]]+w[i]);
  35.         }
  36.     }
  37.     printf("%d",f[n]);
  38.     return 0;
  39. }
复制代码
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5420
13#
 楼主| 发表于 2018-7-27 23:00:16 | 只看该作者
@ zhwang 你要注意去掉多余的大括号
@ 严梓维    if(j-v[i]>=0) 可以用循环的终止条件处理一下不需要这个判断
回复 支持 反对

使用道具 举报

9

主题

89

帖子

292

积分

华一学生

积分
292
14#
发表于 2018-7-28 10:48:07 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. int maxv,n,i,j;
  4. int v[30],p[30];///v表示价格 p表示重要度
  5. int ans;
  6. void dfs(int x,int sumv,int sum)
  7. {
  8.     if (sumv>maxv) return;
  9.     else if (x>=n+1) ans=max(ans,sum);
  10.     else
  11.     {
  12.         dfs(x+1,sumv,sum);
  13.         dfs(x+1,sumv+v[x],sum+v[x]*p[x]);
  14.     }
  15. }
  16. int main()
  17. {
  18.     cin>>maxv>>n;
  19.     for (i=1;i<=n;i++) cin>>v[i]>>p[i];
  20.     dfs(1,0,0);
  21.     cout<<ans;
  22.     return 0;
  23. }
复制代码
回复 支持 反对

使用道具 举报

9

主题

12

帖子

73

积分

注册会员

Rank: 2

积分
73
15#
发表于 2018-10-3 16:52:45 | 只看该作者
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int mm=26;
  4. int a[mm],p[mm],v[mm];
  5. int f[100000001];
  6. int n,m;
  7. int main()
  8. {
  9.     cin>>n>>m;
  10.     f[0]=0;
  11.     for(int i=1;i<=m;i++)
  12.     {
  13.         cin>>v[i]>>p[i];
  14.         a[i]=v[i]*p[i];
  15.     }
  16.     for(int i=1;i<=m;i++)
  17.         for(int j=n;j>=v[i];j--)
  18.             f[j]=max(f[j],f[j-v[i]]+a[i]);
  19.            cout<<f[n];
  20.     return 0;
  21. }
复制代码
回复 支持 反对

使用道具 举报

0

主题

1

帖子

6

积分

新手上路

Rank: 1

积分
6
16#
发表于 2018-10-5 15:33:32 | 只看该作者
本帖最后由 刘至远 于 2018-10-6 15:04 编辑
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int v[30],p[30],dp[30005];
  4. int main()
  5. {
  6.     ios::sync_with_stdio(0);   //syn加速
  7.     int n,m;
  8.     cin>>n>>m;
  9.     for(int i=1;i<=m;i++)
  10.         cin>>v>>p;
  11.     dp[0]=0;
  12.     for(int i=1;i<=m;i++)
  13.         for(int j=n;j>=v;j--)
  14.             dp[j]=max(dp[j],dp[j-v]+v*p);
  15.     cout<<dp[n]<<endl;
  16.     return 0;
  17. }
复制代码

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-11-2 02:25 , Processed in 0.428138 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表