P3092 [USACO13NOV]没有找零No Change
Posted sfwr-you
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P3092 [USACO13NOV]没有找零No Change相关的知识,希望对你有一定的参考价值。
_________________________________________________________________________________________________
usaco上的状压质量都好高啊QAQ
结合了二分查找,前缀和,以及dp状态的巧妙确立
————————————————————————————————————————————————————————————
#include<bits/stdc++.h> using namespace std; int n,k,ans=-1,coin[30],dp[(1<<16)+5],sum[101000]; int find(int val) int l=1,r=n,po=0; while(l<=r) int mid=(l+r)/2; if(sum[mid]<=val)l=mid+1,po=mid; else r=mid-1; return po; int calc(int val) int an=0; for(int i=0;i<k;i++) if(!(val&(1<<i)))an+=coin[i]; return an; int main() cin>>k>>n; for(int i=0;i<k;i++)cin>>coin[i]; for(int i=1;i<=n;i++)cin>>sum[i];sum[i]+=sum[i-1]; for(int i=0;i<=(1<<k)-1;i++) for(int j=0;j<k;j++) if(i&(1<<j)) dp[i]=max(dp[i],find(sum[dp[i^(1<<j)]]+coin[j])); for(int i=0;i<=(1<<k)-1;i++) if(dp[i]==n) ans=max(ans,calc(i)); cout<<ans;
以上是关于P3092 [USACO13NOV]没有找零No Change的主要内容,如果未能解决你的问题,请参考以下文章
P3092 [USACO13NOV]没有找零No Change
P3092 [USACO13NOV]没有找零No Change
[USACO13NOV]没有找零No Change [TPLY]