google code jam 2014 RC_B

来源:互联网 发布:淘宝 折扇 编辑:程序博客网 时间:2024/05/22 12:46

dota都没落了,还出抢人头的题目。这是落后多少年呀。

主要思想,问题转换,将戴安娜射向其他的怪兽的子弹,存起来,到用的时候,再一起用了。

其他的就是DP了。

#include <cstdio>#include <cstring>using namespace std;int T,N,P,Q;int H[102],G[102];int A[102],B[102];int dp[102][2001];inline int max(int a,int b){return a>b?a:b;}int main(){freopen("B-large-practice.in","r",stdin);freopen("b.out","w",stdout);scanf("%d",&T);for(int cas=1; cas<=T; ++cas){scanf("%d%d%d",&P,&Q,&N);for(int i=1; i<=N; ++i){scanf("%d%d",H+i,G+i);}for(int i=1; i<=N; ++i){B[i]=H[i]/Q;if(H[i]%Q==0){B[i]--;}A[i]=(H[i]-Q*B[i])/P;}memset(dp,-1,sizeof(dp));int c=0;dp[0][1]=0;for(int i=1; i<=N; ++i){for(int j=0; j<2001; ++j){if(dp[i-1][j]<0) continue;int tmp2;dp[i][j+B[i]+1]=dp[i-1][j]; //ignore i-th oneint tmp;if(H[i]==A[i]*P+B[i]*Q) tmp=0;elsetmp=1;if(j+B[i]-A[i]-tmp>=0) dp[i][j+B[i]-A[i]-tmp]=max(dp[i][j+B[i]-A[i]-tmp],dp[i-1][j]+G[i]); //get the i-th one}}int ans=0;for(int i=0; i<2001; ++i){ans=max(ans,dp[N][i]);}printf("Case #%d: %d\n",cas,ans);}}


0 0
原创粉丝点击