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 }