hdu 6140 Hybrid Crystals(贪心)

题目链接:hdu 6140 Hybrid Crystals

题意:

给你n个数,为你是否能选一些数出来加起来为k,这些数中有正有负,还有同时可为正可为负。

给的数据有个限制,就是后面的数比前面对应类型的总和都大。

题解:

从后往前贪心就行了。

不会证,不过Claris说贪心是对的。- -!

 1 #include<bits/stdc++.h>
 2 #define mst(a,b) memset(a,b,sizeof(a))
 3 #define F(i,a,b) for(int i=(a);i<=(b);++i)
 4 using namespace std;
 5 
 6 const int N=1e3+7;
 7 int t,n,m,a[N];
 8 char is[N];
 9 
10 int main(){
11     scanf("%d",&t);
12     while(t--)
13     {
14         scanf("%d%d",&n,&m);
15         F(i,1,n)scanf("%d",a+i);
16         F(i,1,n)
17         {
18             char op[2];
19             scanf("%s",op);
20             is[i]=*op;
21         }
22         int ans=0;
23         for(int i=n;i;i--)
24         {
25             if(is[i]=='L'&&ans<m)if(ans<m)ans+=a[i];
26             if(is[i]=='D'&&ans>m)ans-=a[i];
27             if(is[i]=='N')
28             {
29                 if(ans>m)ans-=a[i];
30                 else if(ans<m)ans+=a[i];
31             }
32             if(ans==m)break;
33         }
34         puts(ans==m?"yes":"no");
35     }
36     return 0;
37 }
View Code

 

posted @ 2017-08-17 19:32  bin_gege  阅读(115)  评论(0编辑  收藏  举报