zoukankan      html  css  js  c++  java
  • 【一堆的背包水题】沉迷于刷水无可救药~

    我在干嘛,连普及组都不会考这种题。以三四分钟一道题的速度混了一下BZOJ的题目数量。

    BZOJ1606: [Usaco2008 Dec]Hay For Sale 购买干草

    裸的01背包。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int MAXN=5000+5;
     4 const int MAXC=50000+50;
     5  
     6 int main()
     7 {
     8     int c,h,v[MAXN],f[MAXC];
     9     scanf("%d%d",&c,&h);
    10     memset(f,0,sizeof(f));
    11     for (int i=1;i<=h;i++)
    12     {
    13         scanf("%d",&v[i]);
    14         for (int j=c;j>=v[i];j--) f[j]=max(f[j],f[j-v[i]]+v[i]);
    15     }
    16     printf("%d",f[c]);
    17     return 0;
    18 } 

    BZOJ1625: [Usaco2007 Dec]宝石手镯

    裸的01背包again……注意一下里面的小注释……

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int MAXN=12880+5;
     4  
     5 int main()
     6 {
     7     int dp[MAXN],n,m;
     8     memset(dp,0,sizeof(dp));//如果需要恰巧装满,则dp[0]=0,dp[else]=-INF
     9     scanf("%d%d",&n,&m);
    10     for (int i=1;i<=n;i++)
    11     {
    12         int w,d;
    13         scanf("%d%d",&w,&d);
    14         for (int j=m;j>=w;j--) dp[j]=max(dp[j],dp[j-w]+d);
    15     }
    16     printf("%d",dp[m]);
    17     return 0;
    18 } 

    BZOJ1677: [Usaco2005 Jan]Sumsets 求和

    裸的完全背包。以前写过一个递推版本的。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 const int MAXN=1000000+50;
     8 const int MOD=1e9;
     9  
    10 int main()
    11 {
    12     int n;
    13     scanf("%d",&n);
    14     int k=1,dp[MAXN];
    15     memset(dp,0,sizeof(dp));
    16     dp[0]=1;
    17     while (k<=n)
    18     {
    19         for (int v=k;v<=n;v++) dp[v]=(dp[v]+dp[v-k])%MOD;
    20         k=k*2;
    21     }
    22     printf("%d",dp[n]%MOD);
    23     return 0;
    24 }

    BZOJ1655: [Usaco2006 Jan] Dollar Dayz 奶牛商店

    裸的完全背包,加了高精度。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 const int MAXN=1000+50;
     7 int f[MAXN][MAXN];
     8  
     9 void add(int a,int b)
    10 {
    11     int lena=f[a][0],lenb=f[b][0];
    12     int len=max(lena,lenb);
    13     int i,rem=0;
    14     for (i=1;i<=len || rem;i++)
    15     {
    16         rem=(f[a][i]+f[b][i])/10;
    17         f[a][i]+=f[b][i];
    18         f[a][i]%=10;
    19         f[a][i+1]+=rem;
    20     }
    21     f[a][0]=i-1;
    22 }
    23  
    24 int main()
    25 {
    26     int n,k;
    27     scanf("%d%d",&n,&k);
    28     memset(f,0,sizeof(f));
    29     f[0][0]=f[0][1]=1;
    30     for (int i=1;i<=k;i++)
    31         for (int j=i;j<=n;j++) add(j,j-i);
    32     for (int i=f[n][0];i>=1;i--) printf("%d",f[n][i]);printf("
    ");
    33     return 0;
    34 } 
    35 
  • 相关阅读:
    HDU 3416
    The connection to adb is down, and a severe error has occured
    HDU 2255 奔小康赚大钱 KM裸题
    springMVC --@RequestParam注解(后台控制器获取參数)
    面试宝典之预处理、const与sizeof
    oracle中字符串类似度函数实測
    Android学习之路
    007_尚学堂_高明鑫_android 之项目的打包apk与apk的反编译
    提高eclipse使用效率(二)—— 提高Android开发效率的小技巧
    提高eclipse使用效率(一)--使用快捷键
  • 原文地址:https://www.cnblogs.com/iiyiyi/p/6059451.html
Copyright © 2011-2022 走看看