社区讨论

64pts求调

P11188「KDOI-10」商店砍价参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m2est53m
此快照首次捕获于
2024/10/18 22:01
去年
此快照最后确认于
2025/11/04 16:54
4 个月前
查看原帖
从24分debug到了64分,本蒻已经找不到哪里还可以改了,求大佬指点,代码如下
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int c,t;
char s[100010];
int v[15];
int f[100010][7];
int quickmi(int a,int b) {
	int ans=1;
	while(b) {
		if(b&1) ans*=a;
		a*=a;
		b>>=1;
	}
	return ans;
}
signed main() {
	scanf("%d%d",&c,&t);
	while(t--) {

		scanf("%s",s+1);
		int n=strlen(s+1);
		for(int i=1; i<=9; i++) {
			scanf("%d",&v[i]);
		}
//		cout<<n<<endl;
		memset(f,0x7f,sizeof(f));
		f[n+1][0]=0;
		for(int i=n; i>=1; i--) {
			int x=s[i]-'0';
			for(int j=0; j<=5; j++) {
//				cout<<666666;
				f[i][j]=min(f[i+1][j]+v[x],f[i][j]);
				if(j!=5)f[i][j+1]=min(f[i][j+1],f[i+1][j]+x*quickmi(10,j));
//				cout<<i<<' '<<j<<' '<<f[i][j]<<endl;
			}
		}
//		printf("%d\n",f[1][n]);
		int mi=0x3f3f3f3f;
		for(int i=0; i<=6; i++) {
			mi=min(mi,f[1][i]);
//			cout<<f[1][i]<<' ';
		}
//		cout<<endl;
		printf("%lld\n",mi);
	}
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...