codevs 数字三角形系列 (dfs or DP)
来源:互联网 发布:java 同步互斥 编辑:程序博客网 时间:2024/05/18 08:31
数字三角形W
题目:
http://codevs.cn/problem/2189/
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN=102;bool dp[MAXN][MAXN][MAXN];int n,ans;int a[MAXN][MAXN],sum[MAXN][MAXN];void dfs(int x,int y,int sum){ if(x==n) { ans=max(ans,sum%100); return; } if(a[x+1][y]) dfs(x+1,y,sum+a[x+1][y]); if(a[x+1][y+1]) dfs(x+1,y+1,sum+a[x+1][y+1]); return;}void solve(){ scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) scanf("%d",&a[i][j]); dfs(1,1,a[1][1]); cout<<ans;}int main(){ solve(); return 0;}
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN=102;bool dp[MAXN][MAXN][MAXN];int n;int a[MAXN][MAXN];void solve(){ scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) scanf("%d",&a[i][j]); memset(dp,0,sizeof(dp)); dp[1][1][a[1][1]%100]=1; for(int i=2;i<=n;i++) for(int j=1;j<=i;j++) for(int k=0;k<=99;k++) { int s=k-a[i][j]; if(s<0) s+=100; dp[i][j][k]=dp[i-1][j-1][s] | dp[i-1][j][s]; } for(int i=100;i>=0;i--) for(int j=1;j<=n;j++) if(dp[n][j][i]) { cout<<i<<endl; return; } return;}int main(){ solve(); return 0;}
数字三角形WW:
题目:
http://codevs.cn/problem/2193/
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN=102;bool dp[MAXN][MAXN][MAXN];int n,ans,x1,y1;int a[MAXN][MAXN],sum[MAXN][MAXN];void dfs(int x,int y,int sum,bool flag){ if(x==n/2 && y==n/2) flag=1; if(x==n && flag) { ans=max(ans,sum); return; } if(a[x+1][y]) dfs(x+1,y,sum+a[x+1][y],flag); if(a[x+1][y+1]) dfs(x+1,y+1,sum+a[x+1][y+1],flag); return;}void solve(){ scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) scanf("%d",&a[i][j]); if(x1==1 && y1==1) dfs(1,1,a[1][1],1); else dfs(1,1,a[1][1],0); cout<<ans;}int main(){ solve(); return 0;}
直接把要经过的点+inf;
最后再减去就可以了~~~~;
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int dp[101][101],a[101][101];int n,ans=-1;int main(){ cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) scanf("%d",&a[i][j]); a[n/2][n/2]+=10001; for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+a[i][j]; for(int i=1;i<=n;i++) ans=max(ans,dp[n][i]); cout<<ans-10001;}
数字三角形WWW:
题目:
http://codevs.cn/problem/2198/
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN=102;bool dp[MAXN][MAXN][MAXN];int n,ans,x1,y1;int a[MAXN][MAXN],sum[MAXN][MAXN];void dfs(int x,int y,int sum,bool flag){ if(x==x1 && y==y1) flag=1; if(x==n && flag) { ans=max(ans,sum); return; } if(a[x+1][y]) dfs(x+1,y,sum+a[x+1][y],flag); if(a[x+1][y+1]) dfs(x+1,y+1,sum+a[x+1][y+1],flag); return;}void solve(){ scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) scanf("%d",&a[i][j]); scanf("%d%d",&x1,&y1); if(x1==1 && y1==1) dfs(1,1,a[1][1],1); else dfs(1,1,a[1][1],0); cout<<ans;}int main(){ solve(); return 0;}
同ww;
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int dp[101][101],a[101][101];int n,ans=-1;int main(){ int x,y; cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) scanf("%d",&a[i][j]); scanf("%d%d",&x,&y); a[x][y]+=10001; for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+a[i][j]; for(int i=1;i<=n;i++) ans=max(ans,dp[n][i]); cout<<ans-10001;}
阅读全文
1 0
- codevs 数字三角形系列 (dfs or DP)
- Codevs 4829 [DP]数字三角形升级版
- Codevs 4829 [DP]数字三角形升级版
- <DP>codevs 2189 数字三角形w
- 【codevs】p1220 数字三角形
- Codevs 1220 数字三角形
- 【codevs 1220】数字三角形
- CODEVS 1220数字三角形
- codevs 天梯 数字三角形
- CODEVS 1220 数字三角形
- codevs 1043 方格取数 (dfs or dp)
- codevs 2198 数字三角形WWW
- codevs动态规划 数字三角形
- Codevs 2193 数字三角形WW
- Codevs 2198 数字三角形WWW
- Codevs 2189 数字三角形W
- 【dp】数字三角形问题
- 【DP】数字三角形4
- 让shell脚本中的echo输出带颜色
- AI崛起影响硅谷公众形象
- 写环境变量
- JSON与XML的区别比较
- 26.leetCode406:Queue Reconstruction by Height
- codevs 数字三角形系列 (dfs or DP)
- HDU
- linux tomcat 安装
- 高仿iOS 滚轮实现 省市区 城市选择三级联动
- 网络请求在主线程里面直接封装
- spark 任务运行原理
- Android Studio相关
- Linux
- java回车键登录