3 条题解
-
2
来一发滚动数组优化dp
#include <bits/stdc++.h> using namespace std; int n, m, t, sum1, sum2; int main() { freopen("escape.in", "r", stdin); freopen("escape.out", "w", stdout); cin >> m >> n >> t; for (int i = 1; i <= t; i ++) { sum1 += 17; if (m >= 10) m -= 10, sum2 += 60; else m += 4; sum1 = max(sum1, sum2); if (sum1 > n) { printf("Yes\n%d\n", i); return 0; } } printf("No\n%d\n", sum1); return 0; }
-
0
#include<bits/stdc++.h> using namespace std; int main() { int m,s,t,now=0; cin>>m>>s>>t; int s1=0,s2=0; for(int i=1;i<=t;i++) { s1+=17; if(m>=10) { s2+=60; m-=10; } else m+=4; if(s2>s1) s1=s2; if(s1>s) { cout<<"Yes"<<endl<<i<<endl; return 0; } } cout<<"No"<<endl<<s1<<endl; return 0; }
-
0
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int m,s,t;// 法力,距离,时间 struct node { int juli;// 距离 int fali;// 法力 int shanshuo; }dp[300001]; int main() { scanf("%d%d%d",&m,&s,&t); dp[0].fali=m; for(int i=1;i<=t;i++) { if(dp[i-1].fali>=10) { dp[i].fali=dp[i-1].fali-10; dp[i].shanshuo=dp[i-1].shanshuo+60; } else { dp[i].fali=dp[i-1].fali+4; dp[i].shanshuo=dp[i-1].shanshuo; } dp[i].juli=max(dp[i-1].juli+17,dp[i].shanshuo); } if(dp[t].juli>s) { for(int i=0;i<=t;i++) { if(dp[i].juli>s) { printf("Yes\n%d",i); return 0; } } } else { printf("No\n%d",dp[t].juli); return 0; } return 0; }
- 1
信息
- ID
- 5
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- (无)
- 递交数
- 136
- 已通过
- 63
- 上传者