zoukankan      html  css  js  c++  java
  • Raucous Rockers USACO 3.4 (dp背包?)

    感觉还是类似01背包,相比于01背包直接

    f[i][w]=max(f[i-1][w],f[i-1][w-w[i]]+value[i]);
    这个的最后一个要根据当前总容量是否能整出t,是否剩余的部分>=t分情况下,开始忘了在else时f[i][j]=f[i][j-1]呢,还是不熟练啊,循环开始就该写了

    我的1次ac啊....

     1 /*
     2 
     3 ID: hubiao cave
     4 
     5 PROG: rockers
     6 
     7 LANG: C++
     8 
     9 */
    10 
    11 
    12 
    13 
    14 #include<iostream>
    15 
    16 #include<fstream>
    17 
    18 #include<vector>
    19 
    20 using namespace std;
    21 
    22 
    23 
    24 int main()
    25 
    26 {
    27 
    28 
    29     ifstream fin("rockers.in");
    30 
    31     ofstream fout("rockers.out");
    32 
    33     int m,n,t;
    34     vector<int> vec;
    35     fin>>n>>t>>m;
    36     for(int i=0;i<n;i++)
    37     {
    38         int temp;
    39         fin>>temp;
    40         if(temp<=t)
    41             vec.push_back(temp);
    42     }
    43 
    44     
    45     int dp[21][401];
    46     for(int i=0;i<=400;i++)
    47         dp[0][i]=0;
    48     for(int i=1;i<=vec.size();i++)
    49     {
    50         if(i==15)
    51             i=15;
    52         for(int j=1;j<=m*t;j++)
    53         if(j>=vec[i-1])
    54         {
    55             if(j%t==0)
    56                 dp[i][j]=max(dp[i-1][j],dp[i-1][j-vec[i-1]]+1);
    57             else
    58             {
    59                 int p=j%t;
    60                 if(j/t>0)
    61                 {
    62                     if(p>=vec[i-1])
    63                         dp[i][j]=max(dp[i-1][j],dp[i-1][j-vec[i-1]]+1);
    64                     else
    65                         dp[i][j]=max(dp[i-1][j],dp[i-1][j-p-vec[i-1]]+1);
    66                 }
    67                 else                
    68                 {
    69                     if(p>=vec[i-1])
    70                         dp[i][j]=max(dp[i-1][j],dp[i-1][j-vec[i-1]]+1);
    71                     else
    72                         dp[i][j]=dp[i-1][j];
    73                 }
    74             }
    75         }
    76         else
    77             dp[i][j]=dp[i-1][j];
    78             
    79     }
    80     fout<<dp[n][t*m]<<endl;
    81     return 0;
    82 
    83 
    84 }
  • 相关阅读:
    JS调试工具
    什么是Web Service?
    win7怎么安装消息队列 MSMQ
    死锁产生的原因及四个必要条件
    项目管理模式之如何去除SVN标记
    AJAX中的请求方式以及同步异步的区别
    敏捷软件开发模型--SCRUM
    堆和栈
    UI产品设计流程中的14个要点
    Android中dp和px之间进行转换
  • 原文地址:https://www.cnblogs.com/cavehubiao/p/3384943.html
Copyright © 2011-2022 走看看