P2214 [USACO14MAR]哞哞哞Mooo Moo

题目描述

Farmer John has completely forgotten how many cows he owns! He is too embarrassed to go to his fields to count the cows, since he doesn’t want the cows to realize his mental lapse. Instead, he decides to count his cows secretly by planting microphones in the fields in which his cows tend to gather, figuring that he can determine the number of cows from the total volume of all the mooing he hears.

FJ’s N fields (1 <= N <= 100) are all arranged in a line along a long straight road. Each field might contain several types of cows; FJ owns cows that come from B different breeds (1 <= B <= 20), and a cow of breed i moos at a volume of V(i) (1 <= V(i) <= 100). Moreover, there is a strong wind blowing down the road, which carries the sound of mooing in one direction from left to right: if the volume of mooing in some field is X, then in the next field this will contribute X-1 to the total mooing volume (and X-2 in the field after that, etc.). Otherwise stated, the mooing volume in a field is the sum of the contribution due to cows in that field, plus X-1, where X is the total mooing volume in the preceding field.

Given the volume of mooing that FJ records in each field, please compute the minimum possible number of cows FJ might own.

The volume FJ records in any field is at most 100,000.

民约翰忘记了他到底有多少头牛,他希望通过收集牛叫声的音量来计算牛的数量。

他的N (1 <= N <= 100)个农场分布在一条直线上,每个农场可能包含B (1 <= B <= 20)个品种的牛,一头品种i的牛的音量是V(i) ,(1 <= V(i) <= 100)。一阵大风将牛的叫声从左往右传递,如果某个农场的总音量是X,那么将传递X-1的音量到右边的下一个农场。另外,一个农场的总音量等于该农场的牛产生的音量加上从上一个农场传递过来的音量(即X-1)。任意一个农场的总音量不超过100000。

请计算出最少可能的牛的数量。

输入输出格式

输入格式:

  • Line 1: The integers N and B.

  • Lines 2..1+B: Line i+1 contains the integer V(i).

  • Lines 2+B..1+B+N: Line 1+B+i contains the total volume of all mooing

in field i.

输出格式:

  • Line 1: The minimum number of cows owned by FJ, or -1 if there is no

configuration of cows consistent with the input.

输入输出样例

输入样例#1: 复制

5 2
5
7
0
17
16
20
19

输出样例#1: 复制

4

说明

INPUT DETAILS:

FJ owns 5 fields, with mooing volumes 0,17,16,20,19. There are two breeds

of cows; the first moos at a volume of 5, and the other at a volume of 7.

OUTPUT DETAILS:

There are 2 cows of breed #1 and 1 cow of breed #2 in field 2, and there is

another cow of breed #1 in field 4.

Source: USACO 2014 March Contest, Silver

思路

  • 注意到声音只会从左往右传,那么就可以推出每一块真正发出的声音b[i]

$$b[i]=a[i]-max(a[i-1]-1,0)$$

  • 接下来就是,简单的完全背包

    • 把牛的叫声看作体积,把音量看作总容量,把牛的数量看作商品数

代码

#include<cmath>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#define re register int
using namespace std;
inline int read(){
int x=0,w=1;
char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') w=-1,ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-48,ch=getchar();
return x*w;
}
const int INF=2147483647;
int n,k,maxb=-1,ans=0;
int v[25],a[105],b[105],f[100005];
int main() {
freopen("p2214.in","r",stdin);
freopen("p2214.out","w",stdout);
n=read(),k=read();
for(re i=1;i<=k;++i) v[i]=read();
for(re i=1;i<=n;++i) a[i]=read();
for(re i=1;i<=n;++i) { b[i]=a[i]-max(a[i-1]-1,0); maxb=max(maxb,b[i]); }
for(re i=1;i<=maxb;++i) f[i]=INF;
for(re i=1;i<=k;++i) for(re j=v[i];j<=maxb;j++) { if(f[j-v[i]]!=INF) f[j]=min(f[j],f[j-v[i]]+1); }
for(re i=1;i<=n;i++) { if(f[b[i]]==INF) { printf("-1\n"); return 0;} else ans+=f[b[i]]; }
printf("%d\n",ans);
return 0;
}

最新文章

  1. 从零开始编写属于我的CMS:(六)插件
  2. Android使用AudioTrack发送红外信号
  3. MySQL For Windows修改最大连接数
  4. 我的常用mixin 之 px
  5. Linux就这个范儿 第9章 特种文件系统
  6. Hadoop集群错误
  7. react native android 开发,基础配置笔记。
  8. uCgui和emWin的区别
  9. 用gitolite新建项目,clone后首次push,可能会出现: git: No refs in common and none specified; doing no
  10. POJ 动态规划题目列表
  11. ssm框架中css被拦截
  12. Android便携式热点的开启状态检测和SSID的获取
  13. 打印十字图 JAVA 递归实现
  14. PCI9054 总结(讲解非常清楚)
  15. bzoj 3673 可持久化并查集 by zky
  16. uboot1.1.6
  17. Gradle学习系列之读懂Gradle语法
  18. MyEclipse部署WebLogic
  19. 1 R语言介绍
  20. setOnPageChangeListener 过时了怎么办?

热门文章

  1. HashMap 的数据结构
  2. mysql基本命令(增,查,改,删)
  3. APP专项测试实战1
  4. powercli The SSL connection could not be established, see inner exception. 问题解决
  5. [bug] Hive:map.xml could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running and no node(s) are excluded in this operation.
  6. [Scala] 高级特性
  7. 下载最新版本Fiddler
  8. Linux命令nohup实现命令后台运行并输出到或记录到日志文件
  9. iozone测试方法-20191008
  10. wmctrl像xmonad那样方便地用快捷键来控制任务窗口的显示