「区间DP」「洛谷P1043」数字游戏

「洛谷P1043」数字游戏

日后再写

代码

/*#!/bin/sh
dir=$GEDIT_CURRENT_DOCUMENT_DIR
name=$GEDIT_CURRENT_DOCUMENT_NAME
pre=${name%.*}
g++ -O2 $dir/$name -o $pre -g -Wall -std=c++11
if test $? -eq 0; then
    gnome-terminal -x bash -c "time $dir/$pre;echo;read;"
fi*/
#include
#include
#include
#include
#include
using namespace std;
const int maxn=1e2+5,INF=0x3f3f3f3f,mol=10;
int n,m,f[maxn][maxn][12],a[maxn],sum[maxn][maxn],ans1,ans2=INF,g[maxn][maxn][12];
inline int read(){
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
	while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar();
	return s*w;
}
int mod(int a){
	return ((a%10)+10)%10;
}
int main(){
	freopen("a.in","r",stdin);
	n=read();m=read();
	for(int i=1;i<=n;i++)a[i]=a[i+n]=read();
	for(int i=1;i<=n*2;i++)a[i]+=a[i-1];
	for(int i=1;i<=n*2;i++){
		for(int j=i;j<=2*n;j++){
			g[i][j][1]=f[i][j][1]=mod(a[j]-a[i-1]);
		}
	}
	for(int d=2;d<=m;d++)
		for(int i=1;i<=2*n;i++)
			for(int j=i+d-1;j<=2*n;j++)
				g[i][j][d]=INF;
	for(int d=2;d<=m;d++){
		for(int i=1;i<=2*n;i++){
			for(int j=i+d-1;j<=2*n;j++){
				for(int k=i+d-2;k

你可能感兴趣的:(「区间DP」「洛谷P1043」数字游戏)