玩牌高手
标题:玩牌高手 | 时间限制:1秒 | 内存限制:32768K | 语言限制:不限
给定一个长度为n的整型数组,表示一个选手在n轮内可选择的牌面分数。选手基于规则选牌,请计算所有轮结束后其可以获得的最高总分数。选择规则如下:
1、在每轮里选手可以选择获取该轮牌面,则其总分数加上该轮牌面分数,为其新的总分数。
2、选手也可不选择本轮牌面直接跳到下一轮,此时将当前总分数还原为3轮前的总分数,若当前轮次小于等于3(即在第1、2、3轮选择跳过轮次),则总分数置为0。
3、选手的初始总分数为0,且必须依次参加每一轮。
while True: try: listinput = list(map(int, input().strip().split(','))) count = 0 tmplist = [] for i in range(len(listinput)): if i < 3: count += listinput[i] if count <= 0: count = 0 tmplist.append(count) else: count += listinput[i] if count >= tmplist[i-3]: tmplist.append(count) else: count = tmplist[i-3] tmplist.append(tmplist[i-3]) print(tmplist[-1]) except: break
#include<bits/stdc++.h> using namespace std; vector<int>p; int dp[100]; int main(){ int n; while(1){ cin>>n; p.push_back(n); char c=getchar(); if(c=='\n')break; } dp[0]=max(0,p[0]); for(int i=1;i<p.size();i++){ int pre; if(i<3)pre=0; else pre=dp[i-3]; dp[i]=max(dp[i-1]+p[i],pre); } cout<<dp[p.size()-1]<<endl; }
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main(){ ll x,y; cin>>x>>y; ll sum=1; while(y--)sum*=26; if(sum>=x)cout<<1<<endl; else{ int co=0; while(sum<x){ sum*=10; co++; } cout<<co<<endl; } }