专栏文章
题解:B3803 [NICA #1] 上大分
B3803题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @miqrabrv
- 此快照首次捕获于
- 2025/12/04 09:27 3 个月前
- 此快照最后确认于
- 2025/12/04 09:27 3 个月前
思路
看到这道题首先考虑贪心和动态规划。
贪心是不行的,因为这里有先减分再加分的数据,也就是说故意在 div1 的比赛掉分,使得下一次能够打 div2 加更多的分。
我们考虑动态规划,我们用 表示在前 场比赛中得 分至少需要打几场比赛,就可以轻易推出这题的转移方程。
我们再进行滚动数组优化,就可以得到这道题的正解了。
AC 代码
CPP#include<bits/stdc++.h>
using namespace std;
int n,k,x,dp[4010];
int main() {
cin>>n>>k>>x;
memset(dp,0x3f,sizeof(dp));
dp[x]=0;
while(n--){
int t,a;
int m = 4000;
cin>>t>>a;
if(t==2)m=1899;
for(int j=a+1;j<=m;j++){
int x=j-(j-a+3)/4;
dp[x]=min(dp[x],dp[j]+1);
}
for(int j=min(m,a-1);j>=0;j--){
int x=j+(a-j)/4;
dp[x]=min(dp[x],dp[j]+1);
}
}
for(int i=4000;i>=0;i--)if(!(dp[i]>k)){
cout<<i;
break;
}
return 0;
}
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...