// 转载自
http://blog.163.com/benz_/blog/static/18684203020115721917109/
算法不难看出,就是一个无限背包+多重背包。
问题在于背包的范围。
设John出了X元,则需要找零X-T元。
证明X不超过T+v_max^2:
假设超过了,则找零超过v_max^2,则找零的货币数定超过v_max,
根据抽屉原理,必然有若干个货币组合起来是v_max的倍数,
那么这些货币肯定可以在给钱的时候少给一些,从而推出这样的方案肯定不是最优方案。
复杂度:O(n*(T+vmax^2))  // 我自己做时 是把所有 v[i]相加 得到的 复杂度为 O(n*(T+sum{v[i]})) 然后 WA告诉我我的想法是错误的
// 然后试了下 直接让sum =12000 居然A掉了 然后百度了下 找到了上面的证明 #include <iostream>
#include <algorithm>
#include <queue>
#include <math.h>
#include <stdio.h>
#include <string.h>
using namespace std;
#define MOD 1000000007
#define maxn 24410
int dp[maxn];
int dp2[];
int V[];
int sum;
int num[];
int main()
{
int N,T;
while(scanf("%d %d",&N,&T)!=EOF){
int i,j,k;
sum=;
for(i=;i<=N;i++)
scanf("%d",&V[i]),sum=max(sum,V[i]);//,sum+=V[i];
for(i=;i<=N;i++)
scanf("%d",&num[i]);
sum=sum*sum;
for(i=;i<=T+sum;i++)
dp[i]=MOD;
for(i=;i<=sum;i++)
dp2[i]=MOD; for(i=;i<=N;i++){
k=;
int tp;
while(num[i]>=k){
tp=k*V[i];
for(j=sum+T;j>=tp;j--)
dp[j]=min(dp[j],dp[j-tp]+k);
num[i]-=k;
k=k<<;
}
if(num[i]){
k=num[i];
tp=k*V[i];
for(j=sum+T;j>=tp;j--)
dp[j]=min(dp[j],dp[j-tp]+k);
} for(j=V[i];j<=sum;j++)
dp2[j]=min(dp2[j],dp2[j-V[i]]+);
}
int ans=MOD;
for(i=T;i<=sum+T;i++)
ans=min(ans,dp[i]+dp2[i-T]);
if(ans==MOD) printf("-1\n");
else printf("%d\n",ans);
}
return ;
}

poj 3260 The Fewest Coins的更多相关文章

  1. POJ 3260 The Fewest Coins(多重背包+全然背包)

    POJ 3260 The Fewest Coins(多重背包+全然背包) http://poj.org/problem?id=3260 题意: John要去买价值为m的商品. 如今的货币系统有n种货币 ...

  2. POJ 3260 The Fewest Coins(完全背包+多重背包=混合背包)

    题目代号:POJ 3260 题目链接:http://poj.org/problem?id=3260 The Fewest Coins Time Limit: 2000MS Memory Limit: ...

  3. POJ 3260 The Fewest Coins(背包问题)

    [题目链接] http://poj.org/problem?id=3260 [题目大意] 给出你拥有的货币种类和每种的数量,商店拥有的货币数量是无限的, 问你买一个价值为m的物品,最少的货币流通数量为 ...

  4. POJ 3260 The Fewest Coins(多重背包问题, 找零问题, 二次DP)

    Q: 既是多重背包, 还是找零问题, 怎么处理? A: 题意理解有误, 店主支付的硬币没有限制, 不占额度, 所以此题不比 1252 难多少 Description Farmer John has g ...

  5. POJ 3260 The Fewest Coins 最少硬币个数(完全背包+多重背包,混合型)

    题意:FJ身上有各种硬币,但是要买m元的东西,想用最少的硬币个数去买,且找回的硬币数量也是最少(老板会按照最少的量自动找钱),即掏出的硬币和收到的硬币个数最少. 思路:老板会自动找钱,且按最少的找,硬 ...

  6. The Fewest Coins POJ - 3260

    The Fewest Coins POJ - 3260 完全背包+多重背包.基本思路是先通过背包分开求出"付出"指定数量钱和"找"指定数量钱时用的硬币数量最小值 ...

  7. POJ3260The Fewest Coins[背包]

    The Fewest Coins Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6299   Accepted: 1922 ...

  8. POJ3260——The Fewest Coins(多重背包+完全背包)

    The Fewest Coins DescriptionFarmer John has gone to town to buy some farm supplies. Being a very eff ...

  9. (混合背包 多重背包+完全背包)The Fewest Coins (poj 3260)

    http://poj.org/problem?id=3260   Description Farmer John has gone to town to buy some farm supplies. ...

随机推荐

  1. 2013 Asia Chengdu Regional Contest

    hdu 4786 Fibonacci Tree http://acm.hdu.edu.cn/showproblem.php?pid=4786 copyright@ts 算法源于ts,用最小生成树可以求 ...

  2. Struct2 自定义拦截器

    1 因为struct2 如文件上传,数据验证等功能都是由系统默认的 defalutStack中的拦截器实现的,所以我们定义拦截器需要引用系统默认的defalutStack 这样才不会影响struct2 ...

  3. 0环境设置 - Statspack设置

    简单说明 Statspack主要用于永久存储performance statistics 信息 只有作为sysdba连接时才能安装Statspack. 然后改目录到#cd $ORACLE_HOME/r ...

  4. Git命令参考手册(转)

    git init # 初始化本地git仓库(创建新仓库) git config --global user.name "xxx" # 配置用户名 git config --glob ...

  5. 近期概况&总结

    下午考完英语的学考就要放假啦,是衡中的假期啊QAQ 所以灰常的激动,一点也不想写题(我不会告诉你其实假期只有一个晚上.. 自从CTSC&APIO回来之后就一直在机房颓颓颓,跟着zcg学了很多新 ...

  6. lintcode 中等题:Single number III 落单的数III

    题目 落单的数 III 给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字. 样例 给出 [1,2,2,3,4,4,5,3],返回 1和5 挑战 O(n)时间复杂度, ...

  7. Swift 版本很好的卡片切换效果基于ZLSwipeableView

    前言:在这篇文章你可以学到,一些基本的Swift语法, 基本UI控件闭包等. 实际的效果,比gif图的效果好很多. 卡片切换.gif 首先需要导入ZLSwipeableView pod 'ZLSwip ...

  8. 获取腾讯soso地图坐标代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. jQuery好用插件

    jQuery图片轮播插件(smallslider):http://fz.sjtu.edu.cn/zsw/js/smallslider/ jQuery消息通知(noty):http://www.360d ...

  10. mysqldump常用于MySQL数据库逻辑备份

    mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump ...