zoukankan      html  css  js  c++  java
  • Coins POJ

     题目链接:

     POJ - 1742

    题目大意:

    n个货币,每个货币有一定的数量,然后问你从1~m有多少个数能被凑出来?

    具体思路:

    dp[i][j]代表前i个凑出j元钱第i个的最大剩余量。

    二维(超内存):

     1 #include<iostream>
     2 #include<cstring>
     3 #include<stdio.h>
     4 using namespace std;
     5 # define ll long long
     6 # define lson  l,mid,rt<<1
     7 # define rson mid+1,r,rt<<1|1
     8 # define inf 0x3f3f3f3f
     9 const int maxn = 1e5+100;
    10 const int N = 100+5;
    11 int dp[N][maxn];
    12 int a[N],b[N];
    13 int main()
    14 {
    15     int n,m;
    16     while(~scanf("%d %d",&n,&m)&&(n+m))
    17     {
    18         memset(dp,-1,sizeof(dp));
    19         for(int i=1; i<=n; i++)
    20         {
    21             scanf("%d",&a[i]);
    22         }
    23         for(int i=1; i<=n; i++)
    24         {
    25             scanf("%d",&b[i]);
    26         }
    27         for(int i=0; i<=m; i++)
    28         {
    29             dp[i][0]=0;
    30         }
    31      //   dp[0][0]=0;
    32         for(int i=1; i<=n; i++)
    33         {
    34             for(int j=0; j<=m; j++)
    35             {
    36                 if(dp[i-1][j]>=0)
    37                     dp[i][j]=b[i];
    38                 else
    39                 {
    40                     if(j<a[i]||dp[i][j-a[i]]<0)
    41                         dp[i][j]=-1;
    42                     else
    43                         dp[i][j]=dp[i][j-a[i]]-1;
    44                 }
    45             }
    46         }
    47         int num=0;
    48         for(int i=1; i<=m; i++)
    49         {
    50             num+=(dp[n][i]>=0 ? 1:0);
    51         }
    52         printf("%d
    ",num);
    53     }
    54     return 0;
    55 
    56 }
    View Code

    一维:

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<string>
     4 #include<cstring>
     5 using namespace std;
     6 # define ll long long
     7 # define lson  l,mid,rt<<1
     8 # define rson mid+1,r,rt<<1|1
     9 # define inf 0x3f3f3f3f
    10 const int maxn = 2e5+100;
    11 const int N = 100+10;
    12 int dp[maxn];
    13 int a[maxn],b[maxn];
    14 int main()
    15 {
    16     int n,m;
    17     while(~scanf("%d %d",&n,&m)&&(n+m))
    18     {
    19         memset(dp,-1,sizeof(dp));
    20         for(int i=1; i<=n; i++)
    21         {
    22             scanf("%d",&a[i]);
    23         }
    24         for(int i=1; i<=n; i++)
    25         {
    26             scanf("%d",&b[i]);
    27         }
    28         dp[0]=0;
    29         for(int i=1; i<=n; i++)
    30         {
    31             for(int j=0; j<=m; j++)
    32             {
    33                 if(dp[j]>=0)
    34                     dp[j]=b[i];
    35                 else
    36                 {
    37                     if(j<a[i]||dp[j-a[i]]<0)
    38                         dp[j]=-1;
    39                     else
    40                         dp[j]=dp[j-a[i]]-1;
    41                 }
    42             }
    43         }
    44         int num=0;
    45         for(int i=1; i<=m; i++)
    46         {
    47             num+=(dp[i]>=0 ? 1:0);
    48         }
    49         printf("%d
    ",num);
    50     }
    51     return 0;
    52 
    53 }
    View Code
  • 相关阅读:
    Yarn下分片和分块源代码分析
    Yarn下Map数控制
    hadoop中使用的Unsafe.java
    hbase的coprocessor使用(转)
    eclipse插件
    短线及时发现个股机会的七大招数
    hadoop分类输出
    安装ubuntu-tweak
    rabbitmq安装使用
    “-Xmx1024m -Xms1024m -Xmn512m -Xss256k”——Java运行参数(转)
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10932986.html
Copyright © 2011-2022 走看看