专题三 Problem T

原创 2016年05月31日 21:32:14
一、题目编号:
          1020
二、简单题意:
       某天HiBix打开钱包发现钱包有一些钱,他决定用这些钱去附近的商店买一块表。他想付刚刚好的钱,并且他知道表的价格在n到m之间,但是他不知道确切的价格。已知n,m治病的种类以及张树,求他支付1到m之间的钱数有多少种情况。
三、解题思路形成过程
       和完全背包问题很类似。刚开始虽然结果对了,但是一直超时,最后参考了别人的代码,优化才AC了。
四、感想
        注意优化!优化!优化!
五、AC代码
#include<iostream>
#include<cstring>
using namespace std;
struct coin
{
    int a;
    int c;
};
int price[100001];
int main()
{
    int n,m,w,count;
    coin coins[101];
    while(cin>>n>>m&&(n!=0&&m!=0))
    {


        memset(price,0,sizeof(price));
        for(int i=0;i<n;i++)
        cin>>coins[i].a;
        for(int i=0;i<n;i++)
        cin>>coins[i].c;


        price[0] = 1;
        for(int i=0;i<n;i++)
        for(int j=0;j<coins[i].a;j++)
        {
            count=coins[i].c;
            for(int k=j+coins[i].a;k<=m;k+=coins[i].a)//
            if(price[k]==1)
            count=coins[i].c;
            else if(count>0&&price[k-coins[i].a]==1)
            {
                price[k] = 1;
                count--;
            }
        }
/*
        for(int i=0;i<n;i++)
        {
            int icount=1;
        while(icount<=coins[i].c)
        {
            w=coins[i].a*icount;
            price[w]=1;
            for(int j=i+1;j<n;j++)
            {
                int jcount=0;
                while(jcount<=coins[j].c)
                {
                    w+=coins[j].a;
                    if(w<=100000)
                    {
                        //cout<<w<<endl;
                        price[w]=1;
                    }
                    jcount++;
                }
            }
            icount++;
        }
        }
*/
        int num=0;
        for(int i=1;i<=m;i++)
        if(price[i]==1)
        num++;
        cout<<num<<endl;
    }
    return 0;
}

android开发中遇到的问题汇总(五)

127.ANDROID仿IOS时间_ANDROID仿IOS弹出提示框http://dwtedx.com/itshare_297.html128. Android TextView drawableLe...
  • u011570979
  • u011570979
  • 2015年05月19日 12:29
  • 3395

android开发中遇到的问题汇总【九】

java.lang.ClassNotFoundException Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED] Caused by: java.l...
  • u011570979
  • u011570979
  • 2016年04月01日 07:52
  • 5534

openfire 部署问题

在32位xp上安装官网下载的openfire 没有遇到什么问题,如果下载不含java环境的zip包,无法启动,就下载含有Java环境的exe。 安装spark的时候,若提示install4j错误,需...
  • luohaowang320
  • luohaowang320
  • 2014年03月26日 22:08
  • 4952

搜索专题(DFS)HDU 1016-Prime Ring Problem

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1016 思路分析: 首先看到数据范围不超过20,那就把40以内的素数打表存在数组里吧,然后确定搜索方...
  • stack_queue
  • stack_queue
  • 2016年12月02日 10:18
  • 178

第四专题 Problem F

Problem Description The Head Elder of the tropical island of Lagrishan has a problem. A burst of fo...
  • qq_1053032898
  • qq_1053032898
  • 2016年06月22日 22:37
  • 85

SDAU 搜索专题 20 Prime Ring Problem

1:问题描述 Problem Description A ring is compose of n circles as shown in diagram. Put natural number ...
  • sinat_34336698
  • sinat_34336698
  • 2016年04月10日 16:15
  • 118

UVa 101 The Blocks Problem 数据结构专题

101 - The Blocks Problem 67864 19.16% 14194 题目链接: http://uva.onli...
  • shuangde800
  • shuangde800
  • 2012年06月30日 21:21
  • 1547

kuangbin——线段树专题 C - A Simple Problem with Integers

C - A Simple Problem with Integers Time Limit:5000MS     Memory Limit:131072KB     64bit IO Format:...
  • chudongfang2015
  • chudongfang2015
  • 2016年08月04日 19:08
  • 170

ETL系列专题4——ETL之T

ETL系列专题4——ETL之T 转换(Transform),是ETL过程中最复杂的部分,ETL中E和L都非常容易理解,Extract从源系统中提取数据,Load将数据载入星型模型。而转换的过程涉及到...
  • warren_zqw
  • warren_zqw
  • 2013年06月17日 22:08
  • 684

集训队专题(1)1009 T9

T9 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Subm...
  • RaAlGhul
  • RaAlGhul
  • 2016年01月27日 15:30
  • 686
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:专题三 Problem T
举报原因:
原因补充:

(最多只允许输入30个字)