• 南阳860


      1 /*
      2 d[v] = w; ->价值为v时,d[v] = 达到该价值的最小重量
      3 */
      4 #include<iostream>
      5 #include<cstring>
      6 using namespace std;
      7 
      8 int d[10005];
      9 int maxd,n,maxw,w,v;
     10 
     11 void bag(int w,int v)
     12 {
     13     if(w > maxw)
     14         return ;
     15     for(int i=10000; i>v; --i)
     16     {
     17         if( (d[i-v]>0 && d[i-v]+w < d[i]) || (d[i] == 0 && d[i-v]!=0 && d[i-v]+w <= maxw) )
     18         {
     19             d[i] = d[i-v]+w;
     20             if(i > maxd)
     21                 maxd = i;
     22         }
     23     }
     24     if(d[v] > w || d[v] == 0)
     25     {
     26         d[v] = w;
     27         if(v > maxd)
     28             maxd = v;
     29     }
     30 }
     31 
     32 int main()
     33 {
     34     while(cin >> n >> maxw)
     35     {
     36         memset(d,0,sizeof d);
     37         maxd = 0;
     38         while(n--)
     39         {
     40             cin >> w >> v;
     41             bag(w,v);
     42         }
     43         cout << maxd << endl;
     44     }
     45     return 0;
     46 }
     47 
     48 
     49 //最优代码
     50  
     51 #include <cstdio>
     52 #include <cstring>
     53 #include <string>
     54 #include <queue>
     55 #include <algorithm>
     56 #include <vector>
     57 #include <cmath>
     58 #include <iostream>
     59 #include <ctime>
     60 using namespace std;
     61 
     62 const int N = 1e2+10;
     63 const int inf = 1<<30;
     64 int n, W, sumV;
     65 int w[N], v[N];
     66 int dp[N][N*N];
     67 void solve()
     68 {
     69     int i, j;
     70     for(j = 1;j <= sumV;j++)
     71         dp[0][j] = inf;
     72     dp[0][0] = 0;
     73     for(i = 1;i <= n;i++)
     74     {
     75         for(j = 0;j <= sumV;j++)
     76         {
     77             if(j < v[i])
     78                 dp[i][j] = dp[i-1][j];
     79             else
     80                 dp[i][j] = min(dp[i-1][j] , dp[i-1][j-v[i]] + w[i]);
     81         }
     82     }
     83     int res = 0;
     84     for(i = 0;i <= sumV;i++)
     85         if(dp[n][i] <= W)
     86             res = i;
     87     printf("%d
    ", res);
     88 }
     89 int main()
     90 {
     91     //freopen("Input.txt","r",stdin);
     92     //freopen("Output.txt","w",stdout);
     93     int i, j;
     94     while(~scanf("%d%d", &n, &W))
     95     {
     96         sumV = 0;
     97         for(i = 1;i <= n;i++)
     98             scanf("%d%d", &w[i], &v[i]), sumV += v[i];
     99         solve();
    100     }
    101 }
    102         
  • 相关阅读:
    关于Java 下 Snappy压缩存文件
    英文分词和中文分词
    vuex requires a Promise polyfill in this browser
    Vue 中 export default 和 module.exports
    Linux 进程以及多线程的支持
    mysqldump
    linux磁 盘分区 挂载
    ubuntu16.04挂载windows NTFS磁盘方法
    Linux服务管理 systemctl命令详解
    nextcloud 安装
  • 原文地址:https://www.cnblogs.com/qq188380780/p/6681700.html
Copyright © 2020-2023  润新知