(money/money.in/money.out)

时限1000ms 内存256MB

聪哥在暑假参加了打零工的活动,这个活动分为n个工作日,每个工作日的工资为Vi。有m个结算工钱的时间,聪哥可以自由安排这些时间,也就是说什么时候拿钱,老板说的不算,聪哥才有发言权!(因为聪哥是土豪,他是老板的老板)

聪哥不喜欢身上一次性有太多的钱,于是他想安排一下拿钱的时间,使他一次性拿的钱中最大的最小。(最后一天一定要领钱)

输入

第一行 2个数 n,m

接下来n行,每行一个数,代表Vi.

输出

最小的最大钱数。

样例输入

7 5

100

400

300

100

500

101

400

样例输出

500

 

样例说明

100 400//300 100//500//101//400//

“//”表示老大要去拿钱。

 

数据范围

20%   1<=n<=20

另 20%  1<=n<=50,Vi的和不超过1000

100%  1<=n<=100,000,m<=n,Vi<=10,000

第二题  藏妹子之处(excel

问题描述:

今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格。但要满足如下的两个条件:

(1)任意两个单元格都不在同一行。

(2)任意两个单元格都不在同一列。

选取格子存在一个花费,而这个花费是三个格子两两之间曼哈顿距离的和(如(x1,y1)和(x,y2)的曼哈顿距离为|x1-x2|+|y1-y2|)。狗狗想知道的是,花费在minT到maxT之间的方案数有多少。

答案模1000000007。所谓的两种不同方案是指:只要它选中的单元格有一个不同,就认为是不同的方案。

输入格式:

 一行,4个整数,R、C、minT、maxT。3≤R,C≤4000, 1≤minT≤maxT≤20000。

对于30%的数据,  3 R, C 70。 

输出格式:

 一个整数,表示不同的选择方案数量模1000000007后的结果。

输入输出样例:

输入样例

3 3 1 20000

 

3 3 4 7

 

4 6 9 12

7 5 13  18

 

4000 4000  4000  14000

输出样例

6

0

264

1212

859690013

 

Problem 3 银河之星(galaxy.cpp/c/pas)

NOIP2014-9-6模拟赛

 

NOIP2014-9-6模拟赛NOIP2014-9-6模拟赛


 

T1:

二分贪心

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<algorithm>
 4 #include<cstring>
 5 #define MAXN 100005
 6 #define ll long long
 7 using namespace std;
 8 int a[MAXN];
 9 int n,m;
10 int read(){
11     int x=0,f=1;char ch=getchar();
12     while(ch<'0'||ch>'9'){if('-'==ch)f=-1;ch=getchar();}
13     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
14     return x*f;
15 }
16 int check(int w){
17     int cnt=1,s=0;
18     for(int i=1;i<=n;i++){
19         if(s+a[i]>w){
20             cnt++;
21             if(cnt>m){
22                 return 0;
23             }
24             s=a[i];
25         }
26         else{
27             s+=a[i];
28         }
29     }
30     return 1;
31 }
32 int main()
33 {
34     int L=0,R=0;
35     n=read();m=read();
36     for(int i=1;i<=n;i++){
37         a[i]=read();
38         R+=a[i];
39         L=max(L,a[i]);
40     }
41     while(R-L>1){
42         int mid=((ll)R+(ll)L)/2;
43         if(check(mid)){
44             R=mid;
45         }
46         else{
47             L=mid+1;
48         }
49     }
50     if(check(L)){
51         printf("%d\n",L);
52     }
53     else{
54         printf("%d\n",R);
55     }
56     return 0;
57 }
Code1

相关文章: