NYOJ-791 Color the fence (来源CodeForce)

2023-10-30 17:18

本文主要是介绍NYOJ-791 Color the fence (来源CodeForce),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

NYOJ-791 Color the fence (贪心)

Color the fence
时间限制:1000 ms | 内存限制:65535 KB
难度:2

描述

Tom has fallen in love with Mary. Now Tom wants to show his love and write a number on the fence opposite to Mary’s house. Tom thinks that the larger the numbers is, the more chance to win Mary’s heart he has.Unfortunately, Tom could only get V liters paint. He did the math and concluded that digit i requires ai liters paint. Besides,Tom heard that Mary doesn’t like zero.That’s why Tom won’t use them in his number.Help Tom find the maximum number he can write on the fence.

输入
There are multiple test cases.
Each case the first line contains a nonnegative integer V(0≤V≤10^6).
The second line contains nine positive integers a1,a2,……,a9(1≤ai≤10^5).
输出
Printf the maximum number Tom can write on the fence. If he has too little paint for any digit, print -1.
样例输入

5
5 4 3 2 1 2 3 4 5
2
9 11 1 12 5 8 9 10 6

样例输出

55555
33

来源
CodeForce
上传者
TC_李远航

来源于CodeForce的题目,其实并不难。裸裸的贪心题,可是总是想不通如何用代码实现。

题目很简单,给你v体积油漆,再给你1~9数字分别消耗多少油漆,输出能画出的最大数字。

很明显,我们只要让数字尽量长就可以,数字越长越大嘛,但是,在保证长度的同时,我们也要让高位数字尽量大(贪心策略)。易知,v除以消耗最少的油漆可以得知我们能画的最长数字的长度,然而最长不仅仅可以由最少数字得到。比如:v=5 a={22,30,2,3,31,14,15,7,9} 最长长度为2,且消耗最少的数字组成结果为33,可最优结果为43。所以只要我们能保证我们得到的是高位数字比选择消耗最少的数所得高位数字大并且位数相等的数即可。

#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#include<string.h>
#define MAXN 1111101
using namespace std;
int cost[MAXN];
int main()
{int v;int i,j,k;while(~scanf("%d",&v)){int minn=MAXN;for(i=1; i<=9; i++){scanf("%d",&cost[i]);if(cost[i]<minn)minn=cost[i];}if(minn>v)//油漆太少的情况{printf("-1\n");continue;}for(i=v/minn; i>=1; i--)//目前的染料如果染最小花费那个数字可以染多少位for(j=9; j>=1; j--) //从大到小遍历数字if(v>=cost[j]&&(v-cost[j])/minn+1>=i)//目前的染料能染较大的数字且保证跟染最小那个数字可染的位数相同{printf("%d",j);//贪心选择染大的数字v-=cost[j];break;}printf("\n");}return 0;
}

这篇关于NYOJ-791 Color the fence (来源CodeForce)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/309420

相关文章

三色标记(Tri-color marking)

维基百科部分 原文 https://en.wikipedia.org/wiki/Tracing_garbage_collection#TRI-COLOR Because of these performance problems, most modern tracing garbage collectors implement some variant of the tri-color ma

nyoj 288 士兵杀敌(五)

一道插线问线离线版的题  复杂度O(n); 代码如下: #include<stdio.h>#include<string.h>const int M = 1000003;const int mod=10003;int num[M];int main(){int n,c,q;scanf("%d%d%d",&n,&c,&q);while(c--){int a,b,x;scan

nyoj 1037 Postscript of Tian Ji racing

一道卡贪心的题。 也算一道改编题。 此题的解法推荐为二分图的最大匹配。 首先将输入数据转换一下,然后将满足题意的一组牌建立条边,最终边的覆盖数即为 LN 最后可得的分数。 然后求出最大匹配即可。 代码如下: #include<stdio.h>#include<string.h>char card[30][5];char s[5];int map[30][30];

nyoj 1002 Trucking

同样一道改编题。 只要把题意理解了好。 简单的二分加最短路。 只要二分高度, 然后求最短路,输出满足题意的即可。 代码如下: (最短路用spfa 时间效率高) #include <iostream>#include <cstdio>#include <cstring>#include <ctime>#include <queue>using namespace st

nyoj 1072 我想回家

一道相当题目描述相当扯的题。 这道题目的描述最后说的是求出到达最后一个点的最短距离,所以输入数据最后输入的城堡的坐标是没用的。 就是先求出两点之间的距离,若不大于村落间距离,并且不大于最后的距离限制 l ,则在两点间建边。 最后任意方法求出最短路即可。 #include <iostream>#include<stdio.h>#include<vector>#include<

nyoj 1038 纸牌游戏

poj 的一道改编题,说是翻译题更恰当,因为只是小幅度改动。 一道模拟题,代码掌控能力比较好,思维逻辑清晰的话就能AC。 代码如下: #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{char c[5];int rk;char da[5];int nu

nyoj 685 查找字符串

当初一开始没做出来。 后来,学习过一段时间之后,在返回来做这道题,忽然发现,map类容器可以做。 PS:需要注意的是:此题如果用c++的输入输出的话,会超时。 O(time):gets()<  scanf() < cin。   附上代码: #include<stdio.h>#include<map>#include<string>#include<string.h>usin

nyoj 695 Judging Filling Problems

一道强大的模拟题。。。 只要学会<string>类的运用即可。。。 注意: 1、细节的处理。 2、问题的分情况讨论。。 附上代码: 有好对缀余的地方,希望大神前来更新。 #include<stdio.h>#include<string.h>#include<string>#include<iostream>using namespace std;int num[1000

NYOJ 37 回文字符串(记忆化搜索)

OJ题目 : 戳这里~~ 描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。 输入 第一行给出整数N(0<N<100) 接下来的N行,每行一个字符串,每个字符串长度不超过1000.

NYOJ 763 Vawio Sequence

OJ题目 : 戳这里~ 描述 Vawio Sequence is very funny,it is a sequence of integers. It has some interesting properties. ·   Vawio is of odd length i.e. L = 2*n + 1. ·  The first (n+1) integers of  Vawio s