zoukankan      html  css  js  c++  java
  • [ACM实例代码] 01背包 完全背包 快速幂 筛法求素数

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<math.h>
     4 
     5 const int max_n=2300;
     6 const int max_m=5000;
     7 const int primen=1000000;
     8 
     9 bool prime[primen];
    10 
    11 
    12 typedef long long LL;
    13 
    14 int max(int a,int b)
    15 {
    16     return a>b?a:b;
    17 }
    18 
    19 void package_all(void)                  //完全背包
    20 {
    21     int w[max_n]={7,4,10,2,9,8};
    22     int v[max_n]={9,9,20,5,7,6};
    23     int dp[max_m];
    24     int N,V;
    25     N=6;
    26     V=200;
    27     memset(dp,0,sizeof(dp));
    28     for(int i=0;i<N;i++)
    29         for(int vi=v[i];vi<=V;vi++)
    30             dp[vi]=max(dp[vi],dp[vi-v[i]]+w[i]);
    31     for(int i=0;i<=V;i++) printf("%d
    ",dp[i]);
    32 }
    33 
    34 void package01(void)                    //01背包
    35 {
    36     int w[max_n]={7,4,10,2,9,8};
    37     int v[max_n]={9,9,20,5,7,6};
    38     int dp[max_m];
    39     int N,V;
    40     N=6;
    41     V=200;
    42     memset(dp,0,sizeof(dp));
    43     for(int i=0;i<N;i++)
    44         for(int vi=V;vi>=v[i];vi--)
    45             dp[vi]=max(dp[vi],dp[vi-v[i]]+w[i]);
    46     for(int i=0;i<=V;i++) printf("%d
    ",dp[i]);
    47 }
    48 
    49 LL quick_pow(LL a,LL b,LL c) //a^b mod c    快速幂
    50 {
    51     LL res=1;
    52     printf("%lld^%lld mod %lld is ",a,b,c);
    53     while(b)
    54     {
    55         if(b&1)
    56         {
    57             res=res*a%c;
    58         }
    59         a=a*a%c;
    60         b>>=1;
    61     }
    62     printf("%lld
    ",res);
    63     return res;
    64 }
    65 
    66 void make_prime(void)                   //经典筛法求素数
    67 {
    68     prime[0]=prime[1]=0;
    69     prime[2]=1;
    70     for(int i=3;i<=primen;i++)
    71         prime[i]=i%2;
    72     for(int i=3;i<=(int)sqrt(primen*1.0);i++)
    73     {
    74         if(prime[i])
    75         {
    76             for(int j=i+i;j<=primen;j+=i)
    77                 prime[j]=0;
    78         }
    79     }
    80     for(int i=0;i<=1000;i++)
    81         if(prime[i]) printf("%d ",i);
    82 }
    83 
    84 int main(void)
    85 {
    86     make_prime();
    87     printf("
    ");
    88     quick_pow(2,2147482,2147481);
    89     package_all();
    90     package01();
    91 }
  • 相关阅读:
    材料用词积累
    SqlServer 数据库/数据表 拆分(分布式)【转】
    SqlServer 数据库读写分离【转】
    (整理)在REHL6.5上部署ASP.NET MVC
    (整理)MySQL_REHL6.5 安装MySQL5.5
    (转)查看SQLServer最耗资源时间的SQL语句
    (转)SQLServer查询数据库各种历史记录
    (转)SqlServer2008 数据库同步:发布、订阅
    (整理)SQL Server 2008 CDC 功能使用
    (整理)EF分页的实现
  • 原文地址:https://www.cnblogs.com/VOID-133/p/3632518.html
Copyright © 2011-2022 走看看