标签:continue == set printf min eof 表示 include 经典
/* dp[i][j][k]表示到了第i颗子弹,cd1=j,cd2=k 的最优解 */ #include<bits/stdc++.h> using namespace std; #define N 1005 int cd1,cd2,n,b[N],dp[5][105][105]; int solve(){ int t,cd=0,ans=0; cin>>t; for(int i=1;i<=n;i++){ cd=max(0,cd-(b[i]-b[i-1])); if(cd==0)ans++,cd=t; } return ans; } int main(){ int t;cin>>t; for(int tt=1;tt<=t;tt++){ cin>>n; for(int i=1;i<=n;i++)cin>>b[i]; sort(b+1,b+1+n); int J;cin>>J; if(J==1){ printf("Mission #%d: %d\n\n",tt,n-solve()); continue; } cin>>cd1>>cd2; int cur=1; memset(dp,0,sizeof dp); for(int i=0;i<n;i++){ for(int j=0;j<=cd1;j++) for(int k=0;k<=cd2;k++) dp[cur][j][k]=0x3f3f3f3f; cur^=1; for(int j=0;j<=cd1;j++) for(int k=0;k<=cd2;k++){ int d=b[i+1]-b[i];//下一颗子弹到来时间 int x=j-d,y=k-d;//下一颗子弹对应的冷却时间 x=max(x,0);y=max(y,0); dp[cur^1][x][y]=min(dp[cur^1][x][y],dp[cur][j][k]+1);//不作为 if(x==0)dp[cur^1][cd1][y]=min(dp[cur^1][cd1][y],dp[cur][j][k]); if(y==0)dp[cur^1][x][cd2]=min(dp[cur^1][x][cd2],dp[cur][j][k]); } } int ans=0x3f3f3f3f; for(int j=0;j<=cd1;j++) for(int k=0;k<=cd2;k++) ans=min(ans,dp[cur^1][j][k]); printf("Mission #%d: %d\n\n",tt,ans); } }
标签:continue == set printf min eof 表示 include 经典
原文地址:https://www.cnblogs.com/zsben991126/p/12588215.html