codevs 1085 数字游戏 dp或者暴搜
1085 數字游戲
?2003年NOIP全國聯賽普及組
?時間限制: 1 s ?空間限制: 128000 KB 題目描述?Description丁丁最近沉迷于一個數字游戲之中。這個游戲看似簡單,但丁丁在研究了許多天之后卻發覺原來在簡單的規則下想要贏得這個游戲并不那么容易。游戲是這樣的,在你面前有一圈整數(一共n個),你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模后再相乘,最終得到一個數k。游戲的要求是使你所得的k最大或者最小。
例如,對于下面這圈數字(n=4,m=2):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ????? 2
?????????????????? 4?????????????????????????? -1
???????????????????????????????? 3
當要求最小值時,((2-1) mod 10)×((4+3) mod 10)=1×7=7,要求最大值時,為((2+4+3) mod 10)×(-1 mod 10)=9×9=81。特別值得注意的是,無論是負數還是正數,對10取模的結果均為非負值。
丁丁請你編寫程序幫他贏得這個游戲。
輸入描述?Input Description輸入文件第一行有兩個整數,n(1≤n≤50)和m(1≤m≤9)。以下n行每行有個整數,其絕對值不大于104,按順序給出圈中的數字,首尾相接。
輸出描述?Output Description輸出文件有兩行,各包含一個非負整數。第一行是你程序得到的最小值,第二行是最大值。
樣例輸入?Sample Input4 2
4
3
-1
2
樣例輸出?Sample Output7
81
數據范圍及提示?Data Size & Hinten
思路:
dp:dp[i][j]=sigma(dp[i-j][t]) ?1<=t<=i-j;
#include<bits/stdc++.h> using namespace std; #define ll __int64 #define mod 1000000007 #define pi (4*atan(1.0)) const int N=1e3+10,M=1e6+10,inf=1e9+10; int dp[N][N],n,m; int dfs(int x,int y,int pre) {if(x<pre)return 0;if(y==1)return 1;int sum=0;for(int i=max(1,pre);i<=x;i++)sum+=dfs(x-i,y-1,i);return sum; } int main() {int x,y,z,i,t;scanf("%d%d",&x,&y);printf("%d\n",dfs(x,y,0));return 0; } 暴力代碼?
轉載于:https://www.cnblogs.com/jhz033/p/5614867.html
總結
以上是生活随笔為你收集整理的codevs 1085 数字游戏 dp或者暴搜的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于return和exit
- 下一篇: request.getParameter