谈判专家(东方化改题+懒得看标程)

您们这些出题的都是奆佬

而我只会xjb改题,连题解都懒得看

还把奆佬们的题改的面目全非

这是原题

题目背景

小A玩《枪声与钻石》玩得很高兴,于是憧憬自己也能成为谈判专家。

题目描述

这天晚上,他做了个梦:

一个犯人突然闯进银行,持枪负隅顽抗!他必须赶赴现场去解决这件事件。

对于一个心智不太正常的犯人来说,谈判专家的工作就是安抚他们,让他们冷静,再一顿嘴炮把他们

劝回来。

这当然考验的是嘴上功夫,为此,小A一共备用了n句话,每句话会使得劝回值+w,但是犯人的愤怒值

将会+k,且每句话只能讲一次。而当犯人的愤怒值大于等于max的时候,犯人就会失了智,此时你再

讲什么他也不会听了。

但是说话是要掌握时机的!每句话都有一个时间下限x和谈话时长l,表示你只有当时间t>=x的时候才

能说这句话,而这句话说完并且起作用时会过去l时间。在此期间,不能再多说其他的话,但是你可

以在一句话起作用后的瞬间接上几句话。

默认犯人最初的愤怒值为0,默认时间从0开始。

我们的目标,就是在犯人愤怒值小于max时的劝回值最大化,如果劝回值相同,则时间消耗越少越好。

输入格式

第一行两个正整数n,max。

接下来的n行,每行四个非负整数w,k,x,l。

所有变量的含义见上文。

输出格式

输出最优解的劝回值与此时时间。

 

我都说了会把这题改的面目全非的

题目背景

探女参加《探女探女快说话》玩得很高兴,于是憧憬自己能成为谈判专家。

题目描述

这天晚上,她做了个梦:

正邪突然闯进辉针城,想要下克上!她必须赶赴现场去解决这件事件。

对于心智不太正常的正邪来说(我老婆的心智怎么会不正常!),探女的工作就是安(du)抚(nai)她,

让她冷静,再一顿嘴(du)炮(nai)把她劝回来。

这当然考验的是嘴(du)上(nai)功夫,为此,探女一共备用了n句话,每句话会使得劝回值+w,但是正

邪的愤怒值将会+k,且每句话只能讲一次。而当正邪的愤怒值大于等于max的时候,她就会失了智,

此时探女再讲什么她也不会听了。

但是说话是要掌握时机的!每句话都有一个时间下限x和谈话时长l,表示探女只有当时间t>=x的时候

才能说这句话,而这句话说完并且起作用时会过去l时间。在此期间,不能再多说其他的话,但是探女

可以在一句话起作用后的瞬间接上几句话。

默认正邪最初的愤怒值为0,默认时间从0开始。

探女的目标,就是在正邪愤怒值小于max时的劝回值最大化,如果劝回值相同,则时间消耗越少越好。

但是由于月都科技不发达,探女请求你帮忙。

输入格式

第一行两个正整数n,max。

接下来的n行,每行四个非负整数w,k,x,l。

所有变量的含义见上文。

输出格式

输出最优解的劝回值与此时时间。

脑补场景:

探女:我女儿最乖了

正邪:下克上不可避!(愤怒值+max)

探女:我女儿最不乖了

正邪:下克上不可避!(愤怒值+max)

这难道是传说中的爱的深黑的切吗(不

 

然后这道题呢我写dp写着写着把自己都绕迷糊了

(最终也不知道自己写的是不是dp)

当然dalao的标程还是要发上来的

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<queue>
 6 #include<cctype>
 7 using namespace std;
 8 typedef long long ll;
 9 inline int read(){
10     int X=0,w=0;char ch=0;
11     while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
12     while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
13     return w?-X:X;
14 }
15 struct node{
16     ll w;
17     ll k;
18     ll x;
19     ll l;
20 }a[1001];    //啊这个结构体和我写的一模一样……连名字也一样叫node 
21 bool cmp(node b,node c){    //排序√ 
22     return b.x<c.x;
23 }
24 ll f[1001][50001]={0};
25 int main(){
26 freopen("negotiation.in","r",stdin);freopen("negotiation.out","w",stdout);
27     int n=read();
28     ll nuqi=read();
29     ll ans=0,maxn=0,maxx=0;
30     for(int i=1;i<=n;i++){
31         a[i].w=read();
32         a[i].k=read();
33         a[i].x=read();
34         a[i].l=read();
35         ans+=a[i].l;
36         maxn=max(maxn,a[i].l+a[i].x);
37         maxx=max(maxx,a[i].x);
38     }
39     sort(a+1,a+n+1,cmp);
40     maxn=max(maxn,ans+maxx);
41     ll maxk=0,realt;
42     for(int i=1;i<=n;i++){
43         for(int j=maxn;j>=a[i].x+a[i].l;j--){
44             for(int k=nuqi;k>a[i].k;k--){
45                 f[k][j]=max(f[k][j],f[k-a[i].k][j-a[i].l]+a[i].w);
46             }
47             if(maxk<f[nuqi][j]||(maxk==f[nuqi][j]&&realt>j)){
48                 realt=j;
49                 maxk=f[nuqi][j];
50             }
51         }
52     }
53     printf("%lld %lld\n",maxk,realt);
54     return 0;
55 }

诶等等这是我什么时候写的注释……算了不管了

posted on 2018-02-24 15:23  bb机  阅读(128)  评论(0编辑  收藏  举报

导航