1. 程式人生 > >SICAU-OJ: 數字遊戲

SICAU-OJ: 數字遊戲

cin 遊戲 urn bre type sca 容易 scanf scan

數字遊戲

題意:
給出一個長度為n的數字,然後抹去k個數,使得剩下的數最大。

題解:

貪心的思想:讓答案串中每一位盡可能大。

我們肯定要用完這k次的,假設有一個答案字符串ans,我們現在遍歷給出的串,假設當前遍歷到第i位,設其值為a。

我們現在將a與答案串的每一位進行比較,如果a大於答案串中末尾的數,就刪去這個末尾的數讓a代替它,容易證明這樣肯定能使答案更優。

就一直進行這樣的操作使k用完為止。

如果k沒用完,那麽我們就直接刪除答案串的最後幾位就好了~

代碼如下:

#include <bits/stdc++.h>
using namespace std;
typedef 
long long ll; const int N = 1e5; int n,m; int main(){ while(scanf("%d%d",&n,&m)!=EOF){ if(!n && !m) break ; string s; cin>>s; int tmp = n-m; int k = 0; for(int i=0;i<n;i++){ if(i==0) continue ;
int a=s[i-1]-0,b=s[i]-0; if(b>a && k<m ){ k++; s.erase(i-1,1); i-=2; n--; } } cout<<s.substr(0,tmp)<<endl; } return 0; }

SICAU-OJ: 數字遊戲