20160316 Codevs 1018 单词接龙,1166 矩阵取数(60'),1297 硬币,1009 产生数
来源:互联网 发布:投诉淘宝卖家有补偿吗 编辑:程序博客网 时间:2024/06/06 21:00
单词接龙
#include<cstdio>#include<cstring>char s[25][100],buf[20*100],s1[100],s2[100],ss[5];int v[25],n,ans=0;void dfs(int len){ int t=strlen(buf); ans=ans>t?ans:t; for(int i=0;i<n;i++)if(v[i]<2){ int x=strlen(s[i]),ok=0,j; for(j=1;j<((len<x)?len:x)&&!ok;j++){ strncpy(s1,buf+t-j,j);strncpy(s2,s[i],j); s2[j]=s1[j]=0; if(strcmp(s1,s2)==0)ok=1; } if(ok){ v[i]++; strcat(buf,s[i]+j-1); dfs(strlen(s[i])); buf[t]=0; v[i]--; } }}int main(){ scanf("%d",&n); for(int i=0;i<n;i++) scanf("%s",s[i]); scanf("%s",ss); for(int i=0;i<n;i++)if(ss[0]==s[i][0]){ memset(v,0,sizeof(v)); strcpy(buf,s[i]); v[i]++; dfs(strlen(s[i])); } printf("%d\n",ans); return 0;}/*找到前缀词,从他开始,往后试着用每个单词拼它后面,迭代加深搜索,剪枝:1. 没有与当前龙没有公共部分/或者存在包含关系2. 已经使用了2次的单词*/
矩阵取数
高精度看着就烦,写了个dp模型,double上去过了6成数据
#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>using namespace std;int n,m,a[100][100];double dp[100][100],ans=0,cnt=0;int main(){ int n; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&a[i][j]); for(int x=1;x<=n;x++){ memset(dp,0,sizeof(dp)); ans=0; for(int k=1;k<=m;k++) //取了k个数 for(int i=0,j;i<=k;i++){ //左边取了i个 j=k-i;//右边取了j个 dp[i][j]=max((i==0)?0:dp[i-1][j]+a[x][i]*pow(2,k),dp[i][j-1]+a[x][m-j+1]*pow(2,k)); //左边取一个,或者右边取一个,选最大的 ans=max(ans,dp[i][j]); } cnt+=ans; } printf("%lf\n",cnt); return 0;}
硬币
#include<cstdio>int w,n,ans;char val[100005],r[105][100005];struct coin{ int v,a,b;}a[10];void dfs(int wt,int vl){ //搜索变量设置为总重量和总面值 if(wt>w)return; if(r[wt][vl])return;//记忆 if(wt==w){ if(!val[vl]){ ans++; val[vl]=1; } return ; } r[wt][vl]=1; for(int i=0;i<n;i++) for(int j=a[i].a;j<=a[i].b;j++) dfs(wt+j,vl+a[i].v);}int main(){ scanf("%d%d",&w,&n); for(int i=0;i<n;i++) scanf("%d%d%d",&a[i].v,&a[i].a,&a[i].b); dfs(0,0); printf("%d\n",ans); return 0;}/*一开始没想到这么搜索,表示很多搜索的阶段变量都在题里,恩,长记性了,关键是题型看得太少了...*/
产生数
状态太差,挑了道水图给A了
#include<cstdio>char s[33],g[10][10],r[33][10];int k,cnt;long long dfs(int k,int x){ //对于第k个位,取值x if(r[k][x])return 0; long long t=1; r[k][x]=1; for(int i=0;i<10;i++)if(g[x][i]){ t+=dfs(k,i); } return t;}int main(){ int x,y; scanf("%s%d",s,&k); for(int i=0;i<k;i++){ scanf("%d%d",&x,&y); if(x!=y)g[x][y]=1; } long long ans=1; for(int i=0;s[i];i++){ long long t=dfs(i,s[i]-'0'); ans*=t; //乘法原理 } printf("%lld\n",ans); return 0;}
0 0
- 20160316 Codevs 1018 单词接龙,1166 矩阵取数(60'),1297 硬币,1009 产生数
- 矩阵取数游戏 [Codevs 1166]
- codevs 1166 矩阵取数游戏
- CODEVS 1166 矩阵取数游戏
- CODEVS 1018 单词接龙
- 【CodeVS】1018 单词接龙
- codevs 1018 单词接龙
- CODEVS 1018单词接龙
- codevs 1018 单词接龙
- codevs 1018 单词接龙
- Codevs 1009 产生数
- 【codevs 1009】产生数
- Codevs 1009 产生数
- CodeVS 1166 矩阵取数游戏(区间DP+高精度)
- 矩阵取数游戏[NOIP 2007][Codevs 1166]
- CodeVS 1018 单词接龙 题解
- {CODEVS} 1018 单词接龙(DFS)
- codevs 1018 [noip 2000 提高] 单词接龙
- <Head First Java>集合与泛型
- redis扫盲
- BZOJ 1812: [Ioi2005]riv
- 百度cookie使用分析
- Android studio用的几个插件
- 20160316 Codevs 1018 单词接龙,1166 矩阵取数(60'),1297 硬币,1009 产生数
- shiro 回话管理在spring中使用
- Android WebView加载网页,实现前进、后退、刷新、超链接
- pyhton中列表和字典最本质的区别
- gson 常用方法备注
- Java获取来访者IP
- 工厂模式学习
- FICO面试
- 电平,串口