当前位置:首页 > acm基础算法
ve[x].push_back(y);//储存x能去的有点。 }
nncount=ans=0; for(i=1; i<=n; i++)
if(!vis[i])//如果没有访问就深搜;
tarjan(i);
if(ans==1)
puts(\ else
puts(\
} return 0; }
//hdu 1159最长公共子序列。动态规划。 #include
char a[1001],b[1001]; int i,j,len1,len2;
while(~scanf(\ {
len1=strlen(a); len2=strlen(b); for(i=0;i<=len1;i++) {
f[i][0]=0; }
for(i=0;i<=len2;i++) {
f[0][i]=0; }
// a=\ for(i=1;i<=len1;i++) {
for(j=1;j<=len2;j++) {
if(a[i-1]==b[j-1]) {
f[i][j]=f[i-1][j-1]+1; } else {
41
f[i][j]=f[i-1][j]>f[i][j-1]?f[i-1][j]:f[i][j-1]; }
printf(\
}
printf(\
}
printf(\ } return 0; }
//最长上升公共子序列。 #include
int max(int a,int b) {
return a>b?a:b; }
int a[1010],b[1010]; int f[1010],n,m; int LCIS() {
int i,j,k;
memset(f,0,sizeof(f)); for(i=0;i for(j=0;j if(a[i]==b[j]) //如果a[i]==b[j] { if(f[j] if(a[i]>b[j]) //0到j-1中,对于小于a[i]的,保存f值的最优解 { if(f[k] 42 int ans=0; for(i=0;i int t,i,j; scanf(\ while(t--) { scanf(\ for(i=0;i scanf(\ } scanf(\ for(j=0;j scanf(\ } printf(\ if(t) printf(\ } return 0; } /* 5 1 6 1//数量,钱,积分,免费次数。 4 3 3 //价格,积分兑换,实用价值。求最大实用价值。 0 3 2 2 3 3 3 3 2 1 0 2 4 2 5 0 0 1 0 4 4 1 3 3 4 3 4 4 */ #include 43 using namespace std; const int mm=110; int dp[mm][mm][11]; class node { public:int a,b,c; }f[mm]; int n,v1,v2,kk; void Max(int &x,const int y) { if(x while(scanf(\ { int i; for(i=0;i scanf(\ memset(dp,0,sizeof(dp)); int z,ans=0,tmp; for( i=0;i for(int j=v1;j>=0;--j) for(int k=v2;k>=0;--k) for(int l=kk;l>=0;--l) { tmp=0; if(j-f[i].a>=0) Max(tmp,dp[j-f[i].a][k][l]+f[i].c); if(k-f[i].b>=0) Max(tmp,dp[j][k-f[i].b][l]+f[i].c); if(l-1>=0) Max(tmp,dp[j][k][l-1]+f[i].c); Max(dp[j][k][l],tmp); } } printf(\ } } /*完全背包 3 3 3 7 7 9 9 44
共分享92篇相关文档