Codeforces 803E--Roma and Poker (DP)

原題鏈接:http://codeforces.com/problemset/problem/803/E

?

題意:給一個n長度的字符串,其中'?'可以替換成'D'、'W'、'L'中的任意一種,'D'等價于0,?'W'等價于1、'L'等價于-1。輸出所有'?'被替換掉后,W和L的數目之差為k,且任意一個[1, i]的子串中W和L數目之差不能等于k。

?

思路:用DP做。定義bool dp[i][j]代表前i個字符W和L數目之差為j, -k<=j<=k(在數組中范圍為[0, 2*k]),那么當str[i]為'D'時dp[i][j]轉移到dp[i-1][j],?為'W'時dp[i][j]轉移到dp[i-1][j+1], str[i]為'D'時dp[i][j]轉移到dp[i-1][j-1], 初始值dp[0][0]為true。

接著用一遍dfs倒推求結果,注意字符加的位置。

?

AC代碼:

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<string>
 5 using namespace std;
 6 int dp[2005][4005];
 7 int n,k;
 8 string str;
 9 void change(int i, int L, int D, int W){
10         for(int j=1;j<2*k;j++){
11             if(dp[i-1][j]){
12                 if(D) dp[i][j]=1;
13                 if(L){
14                     if(i!=n&&j-1==0)//[1, i]子串中W和L數目之差不能等于k
15                         continue;
16                     dp[i][j-1]=1;
17                 } 
18                 if(W){
19                     if(i!=n&&j+1==2*k)
20                         continue;
21                     dp[i][j+1]=1;    
22                 }
23         }
24     }
25     return;
26 }
27 string ss;
28 //int t=0;
29 bool res(int i, int j, string ans){
30     //t++;
31     if(i==0&&j==k){
32         ss=ans;
33         return 1;
34     }
35     if(str[i-1]!='?'){
36         if(str[i-1]=='D') return res(i-1, j, 'D'+ans);
37         if(str[i-1]=='W') return res(i-1, j-1, 'W'+ans);
38         if(str[i-1]=='L') return res(i-1, j+1, 'L'+ans);
39     }
40     else
41     {
42         if(dp[i-1][j]&&res(i-1, j, 'D'+ans)) return 1;
43         if(dp[i-1][j-1]&&res(i-1, j-1, 'W'+ans)) return 1;
44         if(dp[i-1][j+1]&&res(i-1, j+1, 'L'+ans)) return 1;
45     }
46     
47     return 0;
48 }
49 int main()
50 {
51     while(cin>>n>>k)
52     {
53         memset(dp, 0, sizeof(dp));
54         dp[0][k]=1;
55         cin>>str;
56         if(str[n-1]=='D'){
57             cout<<"NO"<<endl;
58             continue;
59         }
60         for(int i=1;i<=n;i++){
61             if(str[i-1]=='?')
62                 change(i, 1, 1, 1);
63             else if(str[i-1]=='D')
64                 change(i, 0, 1, 0);    
65             else if(str[i-1]=='W')
66                 change(i, 0, 0, 1);
67             else
68                 change(i, 1, 0, 0);
69         }
70         string ans;
71         if(dp[n][0]){
72             res(n, 0, ans);
73             cout<<ss<<endl; 
74         }
75         else if(dp[n][2*k]){
76             res(n, 2*k, ans);
77             cout<<ss<<endl;
78         }
79         else
80             cout<<"NO"<<endl;
81         //cout<<t<<endl;
82     }
83     return 0;
84 }

這代碼調了我好久啊QAQ,感覺自己真菜

?

轉載于:https://www.cnblogs.com/MasterSpark/p/7450853.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257614.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257614.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257614.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java構造塊_java中的靜態代碼塊、構造代碼塊、構造方法詳解

運行下面這段代碼&#xff0c;觀察其結果&#xff1a;package com.test;public class HelloB extends HelloA {public HelloB() {}{System.out.println("Im B class");}static {System.out.println("static B");}public static void main(String[] args) {…

推薦一個不錯的 Chrome 插件,百變皮膚,還可以去廣告

今天在這里給大家推薦一個非常棒&#xff0c;非常不錯的 Chrome 插件&#xff0c;功能實在是強大又好玩&#xff0c;讓你在瀏覽器中可以如孫悟空一樣72變&#xff0c;再不濟&#xff0c;如果你不會用&#xff0c;不會自定義寫 CSS 樣式&#xff0c;也能夠做到如豬八戒般 36 變。…

【轉】DB2 常用命令

1、 打開命令行窗口   #db2cmd 2、 打開控制中心   # db2cmd db2cc 3、 打開命令編輯器  db2cmd db2ce 操作數據庫命令 4、 啟動數據庫實例   #db2start 5、 停止數據庫實例   #db2stop  如果你不能停止數據庫由于激活的連接&#xff0c;在運行db2stop前執行db2 force ap…

c#調用R

R.NET使用文檔 介紹 本頁面涉及R.NET1.5.13。 1.5.13版本在功能上等同于1.5.12&#xff0c;但可作為一個包在NuGet.org上獲得。 R.NET使.NET框架與R統計語言在同一進程進行互操作。 R.NET需要.NET Framework 4的并有R環境中安裝的本地的DLL。您可以使用R.NET用在.NET的任何語言…

java applet 文本框_Java Applet 文本框 TextField 小例 | 學步園

一個Java Applet程序中必須有一個類是Applet類的子類&#xff0c;成為該子類是Java Applet的主類&#xff0c; 并且必須是public class。 Applet類是包java.applet中的一個類&#xff0c; 同時它還是包java.awt中Container(容器)類的子類。因此Java Applet的主類的實例是一個容…

python界面工具pyqt基礎教程

這里有一份很詳細的中文翻譯供我們學習pyqt&#xff0c;很適合初學者和中級學者&#xff0c;直接丟傳送門&#xff0c;不多說 http://www.qaulau.com/books/PyQt4_Tutorial/introduction.html轉載于:https://www.cnblogs.com/semishigure/p/7451689.html

博客園客戶端(睡睡版iphone)源碼

1.關于 https://itunes.apple.com/us/app/shui-shui-bo-ke-yuan/id512394144?ls1&mt8 項目目前為V3.0版&#xff0c;也是我開發的最新版&#xff0c;目前已無法在appstore下載&#xff0c;項目介紹&#xff1a;http://www.cnblogs.com/bandy/p/3509482.html 2.現狀 目前本…

Spring MVC不要在@Service bean中保存狀態

先看這么一段代碼&#xff1a; Service public class AccountService {private String message;public void foo1() {if (true) {this.message "a";} else {this.message "b";}}public void foo2() {// 改動this.message的代碼...// ... ...} }假設你打算…

java class 關鍵字_java關鍵字及其作用

一、 關鍵字總覽:訪問控制privateprotectedpublic類,方法和變量修飾符abstractclassextendsfinalimplementsinterfacenativenewstaticstrictfpsynchronizedtransientvolatile程序控制breakcontinuereturndowhileifelseforinstanceofswitchcasedefault錯誤處理trycatchthrowthro…

3.過濾數據 ---SQL

一、使用WHERE子句 SELECT prod_name, prod_price FROM Products WHERE prod_price 3.49; 輸出▼ prod_name prod_price ------------------- ---------- Fish bean bag toy 3.49 Bird bean bag toy 3.49 Rabbit bean bag toy 3.49 分析▼ 這條語句從products表中檢索兩個列&a…

IOS-C語言第8天,Struct (結構體)

轉載于:https://www.cnblogs.com/xiangrongsu/p/4309160.html

Win2D 入門教程 VB 中文版 - 防止內存泄漏

避免內存泄漏 本文從微軟官方文檔翻譯 http://microsoft.github.io/Win2D/html/RefCycles.htm 如果文檔有問題&#xff0c;可以在 https://github.com/Nukepayload2/Win2dDocVB發 Issue&#xff0c;也可以直接回復。 當在托管的 XAML 應用程序中使用 Win2D 控件&#xff0c;需要…

java concurrent 鎖_java并發機制鎖的類型和實現

synchronized 和 volatile&#xff0c;是最基礎的兩個鎖&#xff01;volatile是輕量級鎖&#xff0c;它在多核處理器開發中保證了共享變量的可見性。即當一個線程修改一個共享變量時&#xff0c;其他線程能夠讀到這個修改的值。它比syncronized使用和成本更低。要說volatile的實…

JAXB和XStream比較

這兩東東本質上是有差別的&#xff0c;JAXB稱為OX binding工具&#xff0c;XStream應該算序列化工具&#xff0c;但OX binding工具也會marshall和unmarshall&#xff0c;所以包含了序列化這一部分。序列化工具不一定需要提供binding的功能。既然都玩序列化&#xff0c;那就簡單…

【起航計劃 011】2015 起航計劃 Android APIDemo的魔鬼步伐 10 App-Activity-Reorder Activities 后退棧 Intent FLAG...

Reorder Activities 示例有四個相關的Activitives: ReorderOnLaunch, ReorderTwo,ReorderThree, ReorderFour。其中ReorderOnLaunch為主Activity&#xff0c;ReorderOnLaunch啟動ReorderTwo &#xff0c;ReorderTwo啟動 ReorderThree&#xff0c;ReorderThree啟動 ReorderFour。…

java date dateformat_java中Date與DateFormat的格式輸出

一、DateFormatjava.text.DateFormat使用 getDateInstance 來獲取該國家/地區的標準日期格式。另外還提供了一些其他靜態工廠方法。使用 getTimeInstance 可獲取該國家/地區的時間格式。使用 getDateTimeInstance 可獲取日期和時間格式。可以將不同選項傳入這些工廠方法&#x…

spartan6不能直接把時鐘連到IO上

1、問題的提出&#xff1a;spartan6中不允許時鐘信號直接連到IO口上面&#xff1f; 2、解決辦法&#xff1a;ODDR2的使用 ODDR2Primitive: Double Data Rate Output D Flip-Flop with Optional Data Alignment, Clock Enable and Programmable Synchronous or Asynchronous Set…

STL容器及適配器

STL容器 1.序列式容器 &#xff1a; vector&#xff0c;deque&#xff0c;list。 每個元素都有固定的位置&#xff08;取決于插入的時機和位置&#xff0c;與元素值無關&#xff09;。 vector 特點&#xff1a; 將一個元素置于一個動態數組中加以管理&#xff0c;可以隨機存取元…

Html5 Canvas斗地主游戲

過完年來公司&#xff0c;沒什么事&#xff0c;主管說研究下html5 游戲&#xff0c;然后主管就給了一個斗地主的demo&#xff0c;隨后我就開始看代碼&#xff0c; 現在我看了html5以及canvas相關知識和斗地主的demo后&#xff0c;自己用demo上的素材試著寫了個斗地主&#xff0…

java流的傳遞方式是_如何在方法中流式傳輸Java List(Varargs)的值?

我有以下方法&#xff1a;public static List getValuesExclusion(A exclusion) {return Arrays.stream(values()).filter(item -> item ! exclusion).collect(Collectors.toList());}//this function returns enum list of A types that has no A typeexclusion現在我想將它…