java,
分享于 点击 29653 次 点评:231
java,
T1:xx一节课有n分钟,在每一分钟他状态是清醒的或者睡着的,某一分钟如果是清醒的就可以获得一个权值
你可以叫醒xx一次,叫醒后持续k分钟都是清醒的(包括当前这一分钟) 问可以获得权值最大是多少
思路:dp[i]表示i分钟后可以获得的权值 dp1[i] 表示i分钟后清醒时获得的权值
每次遇到睡觉时 ,就叫醒保存最大值(关键处理O(1) 得到这个值)
import java.util.Scanner; public class A { int n,k; int a[] = new int[1000005]; int b[] = new int[100005]; int dp[] = new int[100005]; int dp1[] = new int[100005]; Scanner scanner; public void solve(){ scanner = new Scanner(System.in); n = scanner.nextInt(); k = scanner.nextInt(); for(int i=0;i<n;i++) { a[i] = scanner.nextInt(); } for(int i=0;i<n;i++){ b[i] = scanner.nextInt(); } for(int i=n-1;i>=0;i--){ dp[i] = a[i]+dp[i+1]; dp1[i] = dp1[i+1]; if(b[i]==1){ dp1[i]+=a[i]; } } int sum = 0,ans=0; for(int i=0;i<n;i++){ if(b[i]==1) { sum += a[i]; }else{ int j = Math.min(i+k-1,n); ans = Math.max(ans,sum+dp[i]-dp[j+1]+dp1[j+1]); } } ans= Math.max(ans,sum); System.out.println(ans); } public static void main(String[] args) { new A().solve(); } }
T2:n个点,每个点有ai个节点(按顺序排列) m次询问 每次询问第k个节点在那个点上
思路:二分查找
#include<bits/stdc++.h> using namespace std; int n,m,k; int a[100005]; int main() { cin>>n; a[0] = 0; for(int i=1;i<=n;i++)scanf("%d",&a[i]),a[i]+=a[i-1]; cin>>m; while(m--) { scanf("%d",&k); int id = lower_bound(a+1,a+n+1,k)-a; printf("%d\n",id); } }
T3:有个字典,字典内每个单词都只包含 n个'a' 和 m个'z' 并且所有单词按字典序排列
查找第k个单词 不存在输出-1
思路: 令dp[i][j] 表示 i个z和j个a 的方案数 所以dp[i][j] = dp[i-1][j]+dp[i][j-1]
我们考虑第i个字符,如果当前选了a那么后面剩余的a和z的个数是a,b 那么 如果k<=dp[b][a] 那么就能选a (前提还有a)
否则选z 那么k-=dp[b][a] 因为要减去a的方案数
#include<bits/stdc++.h> using namespace std; int n,m,k; int dp[105][105]; char str[205]; int main() { cin>>n>>m>>k; dp[0][0] = 1; for(int i=1;i<=n;i++)dp[1][i] = i+1,dp[0][i] = 1; for(int i=1;i<=m;i++)dp[i][1] = i+1,dp[i][0] = 1; for(int i=2;i<=m;i++) { for(int j=2;j<=n;j++) { dp[i][j] = dp[i-1][j]+dp[i][j-1]; if(dp[i][j]>1000000000)dp[i][j] = 1000000000; } } if(k>dp[m][n])cout<<-1<<endl; else { int a = n,b = m; for(int i=0;i<n+m;i++) { if(a&&k<=dp[b][a-1]) { str[i] = 'a'; a--; } else { if(a) k-=dp[b][a-1]; str[i] = 'z'; b--; } } str[n+m] = '\0'; printf("%s\n",str); } return 0; }
相关文章
- 暂无相关文章
用户点评