zoukankan      html  css  js  c++  java
  • hdu 2660

    题意:从n个物品中选出k个,给出每个物品的价值,重量,并且重量不能超过w

    思路:dp[i][j]表示重量为i时选j个的最大价值

        dp[i][j]=max(dp[i][j],dp[i-b[k]][j-1]+a[k]],

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 int a[30],b[30];
     5 
     6 int dp[1002][30];
     7 
     8 int main(){
     9     int t;
    10     cin>>t;
    11     while(t--){
    12         int n,k;
    13         scanf("%d%d",&n,&k);
    14         memset(dp,0,sizeof(dp));
    15         for(int i=1;i<=n;i++) {
    16             scanf("%d%d",&a[i],&b[i]);
    17         }
    18         int w;
    19         scanf("%d",&w);
    20         for(int i=1;i<=n;i++){
    21             for(int j=w;j>=b[i];j--){
    22                 for(int x=1;x<=k;x++){
    23                    dp[j][x]=max(dp[j][x],dp[j-b[i]][x-1]+a[i]);
    24                 }
    25             }
    26         }
    27         cout<<dp[w][k]<<endl;
    28     }
    29 }

    DFS  

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 int a[30],b[30];
     5 int Max;
     6 int n,k;
     7 int w;
     8 
     9 void hh(int x,int y,int we,int val){
    10     if(y==k&&we<=w){
    11         Max=max(Max,val);return ;
    12     }
    13     for(int i=x+1;i<=n;i++){
    14         if(y+1<=k&&we+b[i]<=w){
    15             hh(i,y+1,we+b[i],val+a[i]);
    16         }
    17     }
    18 }
    19 
    20 int main(){
    21     int t;
    22     cin>>t;
    23     while(t--){
    24         scanf("%d%d",&n,&k);
    25         for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]);
    26         Max=0;
    27         scanf("%d",&w);
    28         hh(0,0,0,0);
    29         printf("%d
    ",Max);
    30     }
    31 }
  • 相关阅读:
    CSS浏览器兼容----IE的定制CSS样式
    CSS浏览器兼容---判断IE版本的HTM语句
    单链表操作1
    数学建模1
    浏览器内核学习笔记二
    浏览器内核学习笔记一
    网页使用特殊字体
    SQL Server 2008 R2没有卸载干净
    RadioButtonFor绑定值
    SVN 服务启动报错 0x8007042a
  • 原文地址:https://www.cnblogs.com/hhxj/p/7447701.html
Copyright © 2011-2022 走看看