zoukankan      html  css  js  c++  java
  • DP:Dollar Dayz(POJ 3181)

                    

                    一道高精度DP

      题目大意,换工具,有m块钱,有k种价值的物品,(1...k),求一共有多少种换法

      这一题就是完全背包,现在这种完全背包对我来说就是水题了,

      状态转移方程闭着眼睛写dp[j]+=dp[j-i]

      可是这一题还没完,数据量太大,会出现溢出的情况,这一题有一点高精度的要求,要求也挺简单的,两个long long就可以了

      状态转移方程变为:

        dpl[j]+=dpl[j-i];

        dph[j]+=dph[j-i]+f(j)  当dpl[j]>Up时,f(j)=1,且dpl[j]=dp[j]-Up;

      而且更关键的是,这一题根本就是个错题,因为低位根本不需要加前导0就给过,加了就tle

      

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 #define UP 1000000000000000000LL
     5 #define CUT 18
     6 
     7 static long long dpl[1001];
     8 static long long dph[1001];
     9 
    10 int main(void)
    11 {
    12     int sum, num, i, j;
    13     long long k, tmp;
    14 
    15     while (~scanf("%d%d", &sum, &num))
    16     {
    17         dpl[0] = 1;
    18         for (i = 1; i <= num; i++)
    19         {
    20             for (j = i; j <= sum; j++)
    21             {
    22                 dpl[j] = dpl[j] + dpl[j - i];
    23                 dph[j] = dph[j] + dph[j - i];
    24                 if (dpl[j] >= UP)
    25                 {
    26                     dph[j]++;
    27                     dpl[j] = dpl[j] - UP;
    28                 }
    29             }
    30         }
    31         if (dph[sum] != 0)
    32             printf("%lld", dph[sum]);
    33         printf("%lld
    ", dpl[sum]);
    34     }
    35     return 0;
    36 }
  • 相关阅读:
    C++程序代写实现HashSet class
    EL表达式
    Hibernate的事务管理
    ThreadLocal理解
    SOA框架
    JVM垃圾回收机制
    Htpp通讯协议详解
    Android模拟器使用SD卡
    android 开发-HttpClient状态码定义
    android 开发-文件存储之读写sdcard
  • 原文地址:https://www.cnblogs.com/Philip-Tell-Truth/p/4839022.html
Copyright © 2011-2022 走看看