POJ 1252 Euro Efficiency

背包 要么 BFS


意大利是说给你几个基本的货币,组成 1~100 所有货币,使用基本上的货币量以最小的。

出口 用法概率。和最大使用量。


能够BFS 有可能 。

只是记得数组开大点。 可能会出现 100 = 99+99 -98 的情况。


背包是先做一个全然背包,求得最少可能由多少相加。

然后做一个 01背包,看是否能被 减。


背包:

#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
#include<map>
#include<stack>
#include<iostream>
#include<list>
#include<set>
#include<cmath>
#define INF 0x7fffffff
#define eps 1e-6
#define LL long long
using namespace std;
int dp[10002];

int value[7];

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int m=10001;
        for(int i=0; i<6; i++)
            scanf("%d",&value[i]);
        for(int i=1; i<m; i++)
            dp[i]=10001;
        dp[0]=0;
        for(int i=0; i<6; i++)
        {
            for(int j=value[i]; j+value[i]<m; j++)
            {
                dp[j]=min(dp[j-value[i]]+1,dp[j]);
//                printf("%d :%d==\n",j,dp[j]);
            }

        }

        for(int i=0; i<6; i++)
        {
            for(int j=m-value[i]; j>0; j--)
            {
                dp[j]=min(dp[j+value[i]]+1,dp[j]);
//                printf("%d :%d==\n",j,dp[j]);
            }

        }

        double ans=0;
        int maxn=0;
        for(int i=1; i<=100; i++)
        {
//            printf("%d : %d\n",i,dp[i]);
            ans+=dp[i];
            maxn=max(maxn,dp[i]);
        }
        printf("%.2f %d\n",ans/100.0,maxn);
    }
}



BFS:


#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
#include<map>
#include<stack>
#include<iostream>
#include<list>
#include<set>
#include<cmath>
#define INF 0x7fffffff
#define eps 1e-6
#define LL long long
using namespace std;
struct lx
{
    int ans,lv;
};
int ans[2051];
int value[7];
void bfs()
{
    queue<lx>q;
    bool vis[2051];
    memset(vis,0,sizeof(vis));
    lx now,tmp;
    tmp.ans=0,tmp.lv=0;
    q.push(tmp);
    vis[0]=1;
    while(!q.empty())
    {
        tmp=q.front();q.pop();
        ans[tmp.ans]=tmp.lv;
        for(int i=0;i<6;i++)
        {
            int num1=tmp.ans+value[i];
            int num2=tmp.ans-value[i];
            now.lv=tmp.lv+1;
            if(!vis[num1]&&num1>0&&num1<2000)
            {
                vis[num1]=1;
                now.ans=num1;
                q.push(now);
            }
            if(!vis[num2]&&num2>0&&num2<2000)
            {
                vis[num2]=1;
                now.ans=num2;
                q.push(now);
            }
        }
    }
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        for(int i=0; i<6; i++)
            scanf("%d",&value[i]);

        bfs();
        double an=0;
        int maxn=0;
        for(int i=1;i<=100;i++)
        {
            an+=ans[i];
            maxn=max(maxn,ans[i]);
//            printf("%d : %d\n",i,ans[i]);
        }
        printf("%.2f %d\n",an/100,maxn);
    }
}


版权声明:本文博客原创文章。博客,未经同意,不得转载。

posted @   yxwkaifa  阅读(225)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥
历史上的今天:
2014-08-14 ExtJs自学教程(1):一切从API開始
2014-08-14 Linux之旅(1): diff, patch和quilt (下)
2014-08-14 第十一届GPCT杯大学生程序设计大赛完美闭幕
2014-08-14 前端学习——JQuery Ajax使用经验
2014-08-14 VC中获取窗体句柄的各种方法
2014-08-14 简单工厂模式
2014-08-14 2014 ACM省赛总结
点击右上角即可分享
微信分享提示